summaryrefslogtreecommitdiffstats
path: root/js
diff options
context:
space:
mode:
authorBernhard Posselt <dev@bernhard-posselt.com>2015-03-31 10:20:20 +0200
committerBernhard Posselt <dev@bernhard-posselt.com>2015-03-31 10:20:20 +0200
commitbcb39134fe2b1213c2002d3ba0fdccfec5ed5198 (patch)
treeb913378db384460942aaf3bbb12d7137f1d10ea3 /js
parent5a5eda55dcdb636e243bb4afcdac2e1cc6f4787a (diff)
update js deps
Diffstat (limited to 'js')
-rw-r--r--js/package.json4
-rw-r--r--js/vendor/angular-animate/.bower.json10
-rw-r--r--js/vendor/angular-animate/angular-animate.js2
-rw-r--r--js/vendor/angular-animate/angular-animate.min.js2
-rw-r--r--js/vendor/angular-animate/bower.json4
-rw-r--r--js/vendor/angular-animate/package.json2
-rw-r--r--js/vendor/angular-mocks/.bower.json10
-rw-r--r--js/vendor/angular-mocks/angular-mocks.js2
-rw-r--r--js/vendor/angular-mocks/bower.json4
-rw-r--r--js/vendor/angular-mocks/package.json2
-rw-r--r--js/vendor/angular-route/.bower.json10
-rw-r--r--js/vendor/angular-route/angular-route.js2
-rw-r--r--js/vendor/angular-route/angular-route.min.js2
-rw-r--r--js/vendor/angular-route/bower.json4
-rw-r--r--js/vendor/angular-route/package.json2
-rw-r--r--js/vendor/angular-sanitize/.bower.json10
-rw-r--r--js/vendor/angular-sanitize/angular-sanitize.js2
-rw-r--r--js/vendor/angular-sanitize/angular-sanitize.min.js2
-rw-r--r--js/vendor/angular-sanitize/bower.json4
-rw-r--r--js/vendor/angular-sanitize/package.json2
-rw-r--r--js/vendor/angular/.bower.json8
-rw-r--r--js/vendor/angular/angular.js27
-rw-r--r--js/vendor/angular/angular.min.js20
-rw-r--r--js/vendor/angular/angular.min.js.gzipbin50484 -> 50508 bytes
-rw-r--r--js/vendor/angular/angular.min.js.map2
-rw-r--r--js/vendor/angular/bower.json2
-rw-r--r--js/vendor/angular/package.json2
27 files changed, 75 insertions, 68 deletions
diff --git a/js/package.json b/js/package.json
index d3ac485fe..16ceba932 100644
--- a/js/package.json
+++ b/js/package.json
@@ -30,13 +30,13 @@
"grunt-contrib-connect": "^0.9.0",
"grunt-contrib-cssmin": "^0.12.2",
"grunt-contrib-jshint": "^0.11.1",
- "grunt-contrib-uglify": "^0.8.0",
+ "grunt-contrib-uglify": "^0.8.1",
"grunt-contrib-watch": "^0.6.1",
"grunt-karma": "^0.10.1",
"grunt-ng-annotate": "^0.10.0",
"grunt-php": "^1.4.0",
"grunt-phpunit": "^0.3.6",
- "grunt-protractor-runner": "^1.2.1",
+ "grunt-protractor-runner": "^2.0.0",
"grunt-protractor-webdriver": "^0.2.0",
"grunt-wrap": "^0.3.0",
"karma": "^0.12.31",
diff --git a/js/vendor/angular-animate/.bower.json b/js/vendor/angular-animate/.bower.json
index 27a9c65c4..36be555d9 100644
--- a/js/vendor/angular-animate/.bower.json
+++ b/js/vendor/angular-animate/.bower.json
@@ -1,17 +1,17 @@
{
"name": "angular-animate",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-animate.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
},
"homepage": "https://github.com/angular/bower-angular-animate",
- "_release": "1.4.0-build.3936+sha.73f3515",
+ "_release": "1.4.0-build.3937+sha.171b9f7",
"_resolution": {
"type": "version",
- "tag": "v1.4.0-build.3936+sha.73f3515",
- "commit": "36f9a322356c66dc78d2808bea804e209d8e54a4"
+ "tag": "v1.4.0-build.3937+sha.171b9f7",
+ "commit": "5c866f9f73b6384d1cc0515b2dd64ad4cb418e1a"
},
"_source": "git://github.com/angular/bower-angular-animate.git",
"_target": "~1.4.*",
diff --git a/js/vendor/angular-animate/angular-animate.js b/js/vendor/angular-animate/angular-animate.js
index 8285a6c0a..a380ade64 100644
--- a/js/vendor/angular-animate/angular-animate.js
+++ b/js/vendor/angular-animate/angular-animate.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.0-build.3936+sha.73f3515
+ * @license AngularJS v1.4.0-build.3937+sha.171b9f7
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
diff --git a/js/vendor/angular-animate/angular-animate.min.js b/js/vendor/angular-animate/angular-animate.min.js
index e69674d95..60b247bb4 100644
--- a/js/vendor/angular-animate/angular-animate.min.js
+++ b/js/vendor/angular-animate/angular-animate.min.js
@@ -1,5 +1,5 @@
/*
- AngularJS v1.4.0-build.3936+sha.73f3515
+ AngularJS v1.4.0-build.3937+sha.171b9f7
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
diff --git a/js/vendor/angular-animate/bower.json b/js/vendor/angular-animate/bower.json
index 3e82dd086..892c00a87 100644
--- a/js/vendor/angular-animate/bower.json
+++ b/js/vendor/angular-animate/bower.json
@@ -1,9 +1,9 @@
{
"name": "angular-animate",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-animate.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
}
}
diff --git a/js/vendor/angular-animate/package.json b/js/vendor/angular-animate/package.json
index 05014af39..3e2963ee5 100644
--- a/js/vendor/angular-animate/package.json
+++ b/js/vendor/angular-animate/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-animate",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"description": "AngularJS module for animations",
"main": "index.js",
"scripts": {
diff --git a/js/vendor/angular-mocks/.bower.json b/js/vendor/angular-mocks/.bower.json
index f5c50c161..2d969b871 100644
--- a/js/vendor/angular-mocks/.bower.json
+++ b/js/vendor/angular-mocks/.bower.json
@@ -1,17 +1,17 @@
{
"name": "angular-mocks",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-mocks.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
},
"homepage": "https://github.com/angular/bower-angular-mocks",
- "_release": "1.4.0-build.3936+sha.73f3515",
+ "_release": "1.4.0-build.3937+sha.171b9f7",
"_resolution": {
"type": "version",
- "tag": "v1.4.0-build.3936+sha.73f3515",
- "commit": "e67102ec670ae55317791f7d38077556f0ce021c"
+ "tag": "v1.4.0-build.3937+sha.171b9f7",
+ "commit": "d8df3d9d6e9d5b7585607345048b6f5dc8ed35f1"
},
"_source": "git://github.com/angular/bower-angular-mocks.git",
"_target": "~1.4.*",
diff --git a/js/vendor/angular-mocks/angular-mocks.js b/js/vendor/angular-mocks/angular-mocks.js
index 20a157c84..bac49f218 100644
--- a/js/vendor/angular-mocks/angular-mocks.js
+++ b/js/vendor/angular-mocks/angular-mocks.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.0-build.3936+sha.73f3515
+ * @license AngularJS v1.4.0-build.3937+sha.171b9f7
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
diff --git a/js/vendor/angular-mocks/bower.json b/js/vendor/angular-mocks/bower.json
index 4cfbb8eda..f547731a2 100644
--- a/js/vendor/angular-mocks/bower.json
+++ b/js/vendor/angular-mocks/bower.json
@@ -1,9 +1,9 @@
{
"name": "angular-mocks",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-mocks.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
}
}
diff --git a/js/vendor/angular-mocks/package.json b/js/vendor/angular-mocks/package.json
index 88cb5d4fc..671a623a6 100644
--- a/js/vendor/angular-mocks/package.json
+++ b/js/vendor/angular-mocks/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-mocks",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"description": "AngularJS mocks for testing",
"main": "angular-mocks.js",
"scripts": {
diff --git a/js/vendor/angular-route/.bower.json b/js/vendor/angular-route/.bower.json
index ddcc8ee12..5cadb78ab 100644
--- a/js/vendor/angular-route/.bower.json
+++ b/js/vendor/angular-route/.bower.json
@@ -1,17 +1,17 @@
{
"name": "angular-route",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-route.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
},
"homepage": "https://github.com/angular/bower-angular-route",
- "_release": "1.4.0-build.3936+sha.73f3515",
+ "_release": "1.4.0-build.3937+sha.171b9f7",
"_resolution": {
"type": "version",
- "tag": "v1.4.0-build.3936+sha.73f3515",
- "commit": "c1bbc60bbdd984757c9ed6fd0770123fe8850806"
+ "tag": "v1.4.0-build.3937+sha.171b9f7",
+ "commit": "c5a90c96ffbcc6555514ba07cb09999a7f33a804"
},
"_source": "git://github.com/angular/bower-angular-route.git",
"_target": "~1.4.*",
diff --git a/js/vendor/angular-route/angular-route.js b/js/vendor/angular-route/angular-route.js
index c60867011..7d5ba946e 100644
--- a/js/vendor/angular-route/angular-route.js
+++ b/js/vendor/angular-route/angular-route.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.0-build.3936+sha.73f3515
+ * @license AngularJS v1.4.0-build.3937+sha.171b9f7
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
diff --git a/js/vendor/angular-route/angular-route.min.js b/js/vendor/angular-route/angular-route.min.js
index e564516e0..a3cc7b005 100644
--- a/js/vendor/angular-route/angular-route.min.js
+++ b/js/vendor/angular-route/angular-route.min.js
@@ -1,5 +1,5 @@
/*
- AngularJS v1.4.0-build.3936+sha.73f3515
+ AngularJS v1.4.0-build.3937+sha.171b9f7
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
diff --git a/js/vendor/angular-route/bower.json b/js/vendor/angular-route/bower.json
index fef8cc555..1af7d918c 100644
--- a/js/vendor/angular-route/bower.json
+++ b/js/vendor/angular-route/bower.json
@@ -1,9 +1,9 @@
{
"name": "angular-route",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-route.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
}
}
diff --git a/js/vendor/angular-route/package.json b/js/vendor/angular-route/package.json
index e719d1cfd..89d805289 100644
--- a/js/vendor/angular-route/package.json
+++ b/js/vendor/angular-route/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-route",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"description": "AngularJS router module",
"main": "index.js",
"scripts": {
diff --git a/js/vendor/angular-sanitize/.bower.json b/js/vendor/angular-sanitize/.bower.json
index 9cf3dcf96..3430ccf5f 100644
--- a/js/vendor/angular-sanitize/.bower.json
+++ b/js/vendor/angular-sanitize/.bower.json
@@ -1,17 +1,17 @@
{
"name": "angular-sanitize",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-sanitize.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
},
"homepage": "https://github.com/angular/bower-angular-sanitize",
- "_release": "1.4.0-build.3936+sha.73f3515",
+ "_release": "1.4.0-build.3937+sha.171b9f7",
"_resolution": {
"type": "version",
- "tag": "v1.4.0-build.3936+sha.73f3515",
- "commit": "e461bc1f69ce66d2562e04ac54671d1ae15b535d"
+ "tag": "v1.4.0-build.3937+sha.171b9f7",
+ "commit": "8e3c4904f7f62d71895e370ea0b690ce09516508"
},
"_source": "git://github.com/angular/bower-angular-sanitize.git",
"_target": "~1.4.*",
diff --git a/js/vendor/angular-sanitize/angular-sanitize.js b/js/vendor/angular-sanitize/angular-sanitize.js
index a98559b4f..b6047ecaf 100644
--- a/js/vendor/angular-sanitize/angular-sanitize.js
+++ b/js/vendor/angular-sanitize/angular-sanitize.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.0-build.3936+sha.73f3515
+ * @license AngularJS v1.4.0-build.3937+sha.171b9f7
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
diff --git a/js/vendor/angular-sanitize/angular-sanitize.min.js b/js/vendor/angular-sanitize/angular-sanitize.min.js
index ef49742be..c85db89ad 100644
--- a/js/vendor/angular-sanitize/angular-sanitize.min.js
+++ b/js/vendor/angular-sanitize/angular-sanitize.min.js
@@ -1,5 +1,5 @@
/*
- AngularJS v1.4.0-build.3936+sha.73f3515
+ AngularJS v1.4.0-build.3937+sha.171b9f7
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
diff --git a/js/vendor/angular-sanitize/bower.json b/js/vendor/angular-sanitize/bower.json
index 297a6529a..3031407f6 100644
--- a/js/vendor/angular-sanitize/bower.json
+++ b/js/vendor/angular-sanitize/bower.json
@@ -1,9 +1,9 @@
{
"name": "angular-sanitize",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular-sanitize.js",
"ignore": [],
"dependencies": {
- "angular": "1.4.0-build.3936+sha.73f3515"
+ "angular": "1.4.0-build.3937+sha.171b9f7"
}
}
diff --git a/js/vendor/angular-sanitize/package.json b/js/vendor/angular-sanitize/package.json
index 0c074a952..a90474659 100644
--- a/js/vendor/angular-sanitize/package.json
+++ b/js/vendor/angular-sanitize/package.json
@@ -1,6 +1,6 @@
{
"name": "angular-sanitize",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"description": "AngularJS module for sanitizing HTML",
"main": "index.js",
"scripts": {
diff --git a/js/vendor/angular/.bower.json b/js/vendor/angular/.bower.json
index b3e5f0b52..b087f458d 100644
--- a/js/vendor/angular/.bower.json
+++ b/js/vendor/angular/.bower.json
@@ -1,15 +1,15 @@
{
"name": "angular",
- "version": "1.4.0-build.3936+sha.73f3515",
+ "version": "1.4.0-build.3937+sha.171b9f7",
"main": "./angular.js",
"ignore": [],
"dependencies": {},
"homepage": "https://github.com/angular/bower-angular",
- "_release": "1.4.0-build.3936+sha.73f3515",
+ "_release": "1.4.0-build.3937+sha.171b9f7",
"_resolution": {
"type": "version",
- "tag": "v1.4.0-build.3936+sha.73f3515",
- "commit": "a0dea2d4940504eac519e95b50c73b8644bff2ad"
+ "tag": "v1.4.0-build.3937+sha.171b9f7",
+ "commit": "9ec2dbe681053e819f02d1f61188f29c48118c12"
},
"_source": "git://github.com/angular/bower-angular.git",
"_target": "~1.4.*",
diff --git a/js/vendor/angular/angular.js b/js/vendor/angular/angular.js
index 49cda979d..54600a256 100644
--- a/js/vendor/angular/angular.js
+++ b/js/vendor/angular/angular.js
@@ -1,5 +1,5 @@
/**
- * @license AngularJS v1.4.0-build.3936+sha.73f3515
+ * @license AngularJS v1.4.0-build.3937+sha.171b9f7
* (c) 2010-2015 Google, Inc. http://angularjs.org
* License: MIT
*/
@@ -57,7 +57,7 @@ function minErr(module, ErrorConstructor) {
return match;
});
- message += '\nhttp://errors.angularjs.org/1.4.0-build.3936+sha.73f3515/' +
+ message += '\nhttp://errors.angularjs.org/1.4.0-build.3937+sha.171b9f7/' +
(module ? module + '/' : '') + code;
for (i = SKIP_INDEXES, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') {
@@ -2282,7 +2282,7 @@ function toDebugString(obj) {
* - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat".
*/
var version = {
- full: '1.4.0-build.3936+sha.73f3515', // all of these placeholder strings will be replaced by grunt's
+ full: '1.4.0-build.3937+sha.171b9f7', // all of these placeholder strings will be replaced by grunt's
major: 1, // package task
minor: 4,
dot: 0,
@@ -24984,8 +24984,9 @@ var ngOptionsMinErr = minErr('ngOptions');
* option. See example below for demonstration.
*
* <div class="alert alert-warning">
- * **Note:** `ngModel` compares by reference, not value. This is important when binding to an
- * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
+ * **Note:** By default, `ngModel` compares by reference, not value. This is important when binding to an
+ * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). When using `track by`
+ * in an `ngOptions` expression, however, deep equality checks will be performed.
* </div>
*
* ## `select` **`as`**
@@ -25227,6 +25228,7 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
}
return {
+ trackBy: trackBy,
getWatchables: $parse(valuesFn, function(values) {
// Create a collection of things that we would like to watch (watchedArray)
// so that they can all be watched using a single $watchCollection
@@ -25452,8 +25454,9 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
// We also need to watch to see if the internals of the model changes, since
// ngModel only watches for object identity change
- scope.$watch(attr.ngModel, function() { ngModelCtrl.$render(); }, true);
-
+ if (ngOptions.trackBy) {
+ scope.$watch(attr.ngModel, function() { ngModelCtrl.$render(); }, true);
+ }
// ------------------------------------------------------------------ //
@@ -25595,10 +25598,13 @@ var ngOptionsDirective = ['$compile', '$parse', function($compile, $parse) {
// Check to see if the value has changed due to the update to the options
if (!ngModelCtrl.$isEmpty(previousValue)) {
var nextValue = selectCtrl.readValue();
- if (!equals(previousValue, nextValue)) {
+ if (ngOptions.trackBy && !equals(previousValue, nextValue) ||
+ previousValue !== nextValue) {
ngModelCtrl.$setViewValue(nextValue);
+ ngModelCtrl.$render();
}
}
+
}
}
@@ -27210,8 +27216,9 @@ var SelectController =
* option. See example below for demonstration.
*
* <div class="alert alert-warning">
- * **Note:** `ngModel` compares by reference, not value. This is important when binding to an
- * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/).
+ * **Note:** By default, `ngModel` compares by reference, not value. This is important when binding to an
+ * array of objects. See an example [in this jsfiddle](http://jsfiddle.net/qWzTb/). When using `track by`
+ * in an `ngOptions` expression, however, deep equality checks will be performed.
* </div>
*
*/
diff --git a/js/vendor/angular/angular.min.js b/js/vendor/angular/angular.min.js
index fe95d2bc1..c9a455796 100644
--- a/js/vendor/angular/angular.min.js
+++ b/js/vendor/angular/angular.min.js
@@ -1,9 +1,9 @@
/*
- AngularJS v1.4.0-build.3936+sha.73f3515
+ AngularJS v1.4.0-build.3937+sha.171b9f7
(c) 2010-2015 Google, Inc. http://angularjs.org
License: MIT
*/
-(function(O,Y,u){'use strict';function H(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.0-build.3936+sha.73f3515/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;
+(function(O,Y,u){'use strict';function H(b){return function(){var a=arguments[0],c;c="["+(b?b+":":"")+a+"] http://errors.angularjs.org/1.4.0-build.3937+sha.171b9f7/"+(b?b+"/":"")+a;for(a=1;a<arguments.length;a++){c=c+(1==a?"?":"&")+"p"+(a-1)+"=";var d=encodeURIComponent,e;e=arguments[a];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=d(e)}return Error(c)}}function Ra(b){if(null==b||Sa(b))return!1;var a=b.length;
return b.nodeType===na&&a?!0:I(b)||C(b)||0===a||"number"===typeof a&&0<a&&a-1 in b}function n(b,a,c){var d,e;if(b)if(G(b))for(d in b)"prototype"==d||"length"==d||"name"==d||b.hasOwnProperty&&!b.hasOwnProperty(d)||a.call(c,b[d],d,b);else if(C(b)||Ra(b)){var f="object"!==typeof b;d=0;for(e=b.length;d<e;d++)(f||d in b)&&a.call(c,b[d],d,b)}else if(b.forEach&&b.forEach!==n)b.forEach(a,c,b);else for(d in b)b.hasOwnProperty(d)&&a.call(c,b[d],d,b);return b}function Ld(b,a,c){for(var d=Object.keys(b).sort(),
e=0;e<d.length;e++)a.call(c,b[d[e]],d[e]);return d}function jc(b){return function(a,c){b(c,a)}}function Md(){return++jb}f