| 
					
				 | 
			
			
				@@ -1692,19 +1692,12 @@ category: 'accessing', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (aKey,aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) { 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var index; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for(var i=0;i<self['@keys'].length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(self['@keys'][i].__eq(aKey)) {index = i;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(typeof index === 'undefined') { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return aBlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return self['@values'][index]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var index = self._positionOfKey_(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return index >=0 ? self['@values'][index] : aBlock(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, function($ctx1) {$ctx1.fill(self,"at:ifAbsent:",{aKey:aKey,aBlock:aBlock}, smalltalk.Dictionary)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["aKey", "aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "at: aKey ifAbsent: aBlock\x0a\x09<\x0a\x09\x09var index;\x0a\x09\x09for(var i=0;i<self['@keys'].length;i++){\x0a\x09\x09\x09if(self['@keys'][i].__eq(aKey)) {index = i;}\x0a\x09\x09};\x0a\x09\x09if(typeof index === 'undefined') {\x0a\x09\x09\x09return aBlock();\x0a\x09\x09} else {\x0a\x09\x09\x09return self['@values'][index];\x0a\x09\x09}\x0a\x09>", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "at: aKey ifAbsent: aBlock\x0a\x09<\x0a\x09\x09var index = self._positionOfKey_(aKey);\x0a\x09\x09return index >>=0 ? self['@values'][index] : aBlock();\x0a\x09>", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1718,19 +1711,18 @@ category: 'accessing', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (aKey,aValue){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) { 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var index = self['@keys'].indexOf(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var index = self._positionOfKey_(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(index === -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			self['@values'].push(aValue); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			self['@keys'].push(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			self['@values'][index] = aValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var keys = self['@keys']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			index = keys.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			keys.push(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return aValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return self['@values'][index] = aValue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, function($ctx1) {$ctx1.fill(self,"at:put:",{aKey:aKey,aValue:aValue}, smalltalk.Dictionary)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["aKey", "aValue"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "at: aKey put: aValue\x0a\x09<\x0a\x09\x09var index = self['@keys'].indexOf(aKey);\x0a\x09\x09if(index === -1) {\x0a\x09\x09\x09self['@values'].push(aValue);\x0a\x09\x09\x09self['@keys'].push(aKey);\x0a\x09\x09} else {\x0a\x09\x09\x09self['@values'][index] = aValue;\x0a\x09\x09};\x0a\x0a\x09\x09return aValue;\x0a\x09>", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "at: aKey put: aValue\x0a\x09<\x0a\x09\x09var index = self._positionOfKey_(aKey);\x0a\x09\x09if(index === -1) {\x0a\x09\x09\x09var keys = self['@keys'];\x0a\x09\x09\x09index = keys.length;\x0a\x09\x09\x09keys.push(aKey);\x0a\x09\x09}\x0a\x0a\x09\x09return self['@values'][index] = aValue;\x0a\x09>", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1743,13 +1735,11 @@ selector: "includesKey:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'testing', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (aKey){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return smalltalk.withContext(function($ctx1) { 
var $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$1=_st(self["@keys"])._includes_(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return $1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey}, smalltalk.Dictionary)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) { 
 return self._positionOfKey_(aKey) >= 0; ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"includesKey:",{aKey:aKey}, smalltalk.Dictionary)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["aKey"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "includesKey: aKey\x0a\x09^keys includes: aKey", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["includes:"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "includesKey: aKey\x0a\x09< return self._positionOfKey_(aKey) >>= 0; >", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.Dictionary); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1812,6 +1802,28 @@ referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.Dictionary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+"_positionOfKey_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "positionOfKey:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'private', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (anObject){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) { 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var keys = self['@keys']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for(var i=0;i<keys.length;i++){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(keys[i].__eq(anObject)) { return i;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"positionOfKey:",{anObject:anObject}, smalltalk.Dictionary)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["anObject"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "positionOfKey: anObject\x0a\x09<\x0a\x09\x09var keys = self['@keys'];\x0a\x09\x09for(var i=0;i<keys.length;i++){\x0a\x09\x09\x09if(keys[i].__eq(anObject)) { return i;}\x0a\x09\x09}\x0a\x09\x09return -1;\x0a\x09>", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.Dictionary); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 "_removeKey_ifAbsent_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1820,19 +1832,22 @@ category: 'adding/removing', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 fn: function (aKey,aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) { 
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            var index = self['@keys'].indexOf(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if(index === -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return aBlock() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                var value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                self['@keys'].splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                value = self['@values'].splice(index, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                return value[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    ; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var index = self._positionOfKey_(aKey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(index === -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return aBlock() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var keys = self['@keys'], values = self['@values']; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var value = values[index], l = keys.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			keys[index] = keys[l-1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			keys.pop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			values[index] = values[l-1]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			values.pop(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return value; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return self}, function($ctx1) {$ctx1.fill(self,"removeKey:ifAbsent:",{aKey:aKey,aBlock:aBlock}, smalltalk.Dictionary)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["aKey", "aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "removeKey: aKey ifAbsent: aBlock\x0a    <\x0a            var index = self['@keys'].indexOf(aKey);\x0a            if(index === -1) {\x0a                return aBlock()\x0a            } else {\x0a                var value;\x0a                self['@keys'].splice(index, 1);\x0a                value = self['@values'].splice(index, 1);\x0a                return value[0];\x0a            };\x0a    >", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "removeKey: aKey ifAbsent: aBlock\x0a\x09<\x0a\x09\x09var index = self._positionOfKey_(aKey);\x0a\x09\x09if(index === -1) {\x0a\x09\x09\x09return aBlock()\x0a\x09\x09} else {\x0a\x09\x09\x09var keys = self['@keys'], values = self['@values'];\x0a\x09\x09\x09var value = values[index], l = keys.length;\x0a\x09\x09\x09keys[index] = keys[l-1];\x0a\x09\x09\x09keys.pop();\x0a\x09\x09\x09values[index] = values[l-1];\x0a\x09\x09\x09values.pop();\x0a\x09\x09\x09return value;\x0a\x09\x09}\x0a\x09>", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 messageSends: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 |