docs: function () {
                            var x = isolate.timeline() || 0;
                            var relevantIndex = 0;
                            var relevantSegment = segments[relevantIndex];
  
                            for (var j = 0; j < segments.length; j++) {
                              //this is the relevant segment if x is in the subdomain
                              if (x >= segments[j].lowerBound && x <= segments[j].upperBound) {
                                relevantSegment = segments[j];
                                break;
                              }
                              //this is the relevant segment if it is the last one
                              if (j === segments.length - 1) {
                                relevantSegment = segments[j];
                                break;
                              }
                              //this is the relevant segment if x is greater than its upper
                              //bound but less than the next segment's lower bound
                              if (x >= segments[j].upperBound && x < segments[j + 1].lowerBound) {
                                relevantSegment = segments[j];
                                break;
                              }
                            }
  
                            if (x <= relevantSegment.lowerBound){
                              return relevantSegment.startValue;
                            }
                            if (x >= relevantSegment.upperBound){
                              return relevantSegment.endValue;
                            }
  
                            //normalize our domain to [0, 1]
                            var subDomain = (relevantSegment.upperBound - relevantSegment.lowerBound);
                            var normalizedX = (x - relevantSegment.lowerBound) / subDomain;
  
                            //Support interpolating multiple values, e.g. for a Scale array [x,y,z]
                            if (Array.isArray(relevantSegment.startValue)) {
                              var ret = [];
                              for (var k = 0; k < relevantSegment.startValue.length; k++) {
                                ret.push(
                                  relevantSegment.startValue[k] + relevantSegment.curve(normalizedX)
                                    *
                                    (relevantSegment.endValue[k] - relevantSegment.startValue[k])
                                );
                              }
                              return ret;
                            } else {
                              return relevantSegment.startValue
                                + relevantSegment.curve(normalizedX)
                                * (relevantSegment.endValue
                                - relevantSegment.startValue);
                            }
                          }