{"version":3,"sources":["webpack://Vex/webpack/universalModuleDefinition","webpack://Vex/webpack/bootstrap","webpack://Vex/./src/vex.js","webpack://Vex/./src/fraction.js","webpack://Vex/./src/registry.js","webpack://Vex/./src/element.js","webpack://Vex/./src/boundingboxcomputation.js","webpack://Vex/./src/boundingbox.js","webpack://Vex/./src/glyph.js","webpack://Vex/./src/smufl.js","webpack://Vex/./src/fonts/bravura_metrics.js","webpack://Vex/./src/fonts/bravura_glyphs.js","webpack://Vex/./src/fonts/gonville_metrics.js","webpack://Vex/./src/fonts/gonville_glyphs.js","webpack://Vex/./src/fonts/petaluma_metrics.js","webpack://Vex/./src/fonts/petaluma_glyphs.js","webpack://Vex/./src/fonts/custom_metrics.js","webpack://Vex/./src/fonts/custom_glyphs.js","webpack://Vex/./src/tables.js","webpack://Vex/./src/canvascontext.js","webpack://Vex/./src/raphaelcontext.js","webpack://Vex/./src/svgcontext.js","webpack://Vex/./src/renderer.js","webpack://Vex/./src/stem.js","webpack://Vex/./src/tuplet.js","webpack://Vex/./src/beam.js","webpack://Vex/./src/voice.js","webpack://Vex/./src/staveconnector.js","webpack://Vex/./src/tickable.js","webpack://Vex/./src/note.js","webpack://Vex/./src/notehead.js","webpack://Vex/./src/stemmablenote.js","webpack://Vex/./src/modifier.js","webpack://Vex/./src/dot.js","webpack://Vex/./src/stavenote.js","webpack://Vex/./src/frethandfinger.js","webpack://Vex/./src/music.js","webpack://Vex/./src/accidental.js","webpack://Vex/./src/notesubgroup.js","webpack://Vex/./src/stavetie.js","webpack://Vex/./src/tabtie.js","webpack://Vex/./src/gracenotegroup.js","webpack://Vex/./src/strokes.js","webpack://Vex/./src/stringnumber.js","webpack://Vex/./src/articulation.js","webpack://Vex/./src/tickcontext.js","webpack://Vex/./src/ornament.js","webpack://Vex/./src/annotation.js","webpack://Vex/./src/bend.js","webpack://Vex/./src/vibrato.js","webpack://Vex/./src/modifiercontext.js","webpack://Vex/./src/formatter.js","webpack://Vex/./src/stavemodifier.js","webpack://Vex/./src/stavebarline.js","webpack://Vex/./src/staverepetition.js","webpack://Vex/./src/stavesection.js","webpack://Vex/./src/stavetempo.js","webpack://Vex/./src/textnote.js","webpack://Vex/./src/stavetext.js","webpack://Vex/./src/clef.js","webpack://Vex/./src/keysignature.js","webpack://Vex/./src/timesignature.js","webpack://Vex/./src/stavevolta.js","webpack://Vex/./src/stave.js","webpack://Vex/./src/tabstave.js","webpack://Vex/./src/tabnote.js","webpack://Vex/./src/vibratobracket.js","webpack://Vex/./src/multimeasurerest.js","webpack://Vex/./src/clefnote.js","webpack://Vex/./src/keysignote.js","webpack://Vex/./src/timesignote.js","webpack://Vex/./src/tabslide.js","webpack://Vex/./src/gracenote.js","webpack://Vex/./src/gracetabnote.js","webpack://Vex/./src/tuning.js","webpack://Vex/./src/keymanager.js","webpack://Vex/./src/stavehairpin.js","webpack://Vex/./src/curve.js","webpack://Vex/./src/textdynamics.js","webpack://Vex/./src/staveline.js","webpack://Vex/./src/pedalmarking.js","webpack://Vex/./src/textbracket.js","webpack://Vex/./src/barnote.js","webpack://Vex/./src/ghostnote.js","webpack://Vex/./src/tremolo.js","webpack://Vex/./src/crescendo.js","webpack://Vex/./src/glyphnote.js","webpack://Vex/./src/repeatnote.js","webpack://Vex/./src/parser.js","webpack://Vex/./src/easyscore.js","webpack://Vex/./src/factory.js","webpack://Vex/./src/system.js","webpack://Vex/./src/index.js"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","Vex","L","block","args","line","Array","slice","join","console","log","MakeException","message","data","Error","RERR","RuntimeError","code","this","Merge","destination","source","Min","Math","min","Max","max","forEach","a","fn","length","RoundN","x","parseInt","MidLine","b","mid_line","SortAndUnique","arr","cmp","eq","last","newArr","sort","push","Contains","obj","getCanvasContext","canvas_sel","canvas","document","getElementById","getContext","drawDot","ctx","y","color","save","setFillStyle","beginPath","arc","PI","closePath","fill","restore","BM","f","start_time","Date","getTime","elapsed","StackTrace","stack","W","Prefix","text","prefix","Fraction","numerator","denominator","set","GCD","LCM","arg0","shift","LCMM","undefined","u","gcd","param1","param2","otherNumerator","otherDenominator","lcm","compare","__compareA","copy","simplify","__compareB","subtract","greaterThanEquals","greaterThan","floor","abs","__tmp","toString","q","quotient","fraction","toSimplifiedString","str","split","X","setIndexValue","index","id","elem","Registry","clear","type","class","oldValue","getAttribute","setAttribute","INDEXES","updateIndex","onRegister","attrName","keys","map","getElementsByAttribute","className","array","filter","includes","concat","registry","defaultRegistry","Element","attrs","newID","el","classes","boundingBox","context","rendered","fontStack","Flow","DEFAULT_FONT_STACK","musicFont","getDefaultRegistry","register","ID","style","getStyle","shadowColor","setShadowColor","shadowBlur","setShadowBlur","fillStyle","strokeStyle","setStrokeStyle","lineWidth","setLineWidth","checkContext","applyStyle","draw","restoreStyle","onUpdate","BoundingBoxComputation","x1","y1","x2","y2","Number","NaN","addPoint","isNaN","p0x","p0y","p1x","p1y","p2x","p2y","cp1x","cp1y","cp2x","cp2y","addBezierCurve","p3x","p3y","p0","p1","p2","p3","pow","b2ac","t1","sqrt","addX","addY","t2","BoundingBox","w","h","that","new_x","new_y","new_w","new_h","rect","stroke","processOutline","outline","originX","originY","scaleX","scaleY","outlineFns","command","nextX","nextY","doOutline","Glyph","point","options","getFontStack","category","metrics","x_shift","y_shift","originShift","setOptions","reset","font","defaultValue","lookupMetric","glyph","getGlyphs","lookupGlyph","lookupFontMetric","scale","x_min","x_max","ha","CACHE","cached_outline","x_pos","y_pos","val","params","loadMetrics","getResolution","renderOutline","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","bboxComp","addQuadraticCurve","z","noOp","width","height","stave","bbox","getOutlineBoundingBox","getW","getH","xShift","getX","yShift","getY","setOriginX","setOriginY","setRendered","getYForGlyphs","Font","fontData","codePoints","resolution","parts","glyphs","Fonts","Bravura","smufl","padding","clef","default","small","annotations","smuflCode","treble","shiftX","bass","lineCount","shiftY","pedalMarking","up","down","digits","shiftLine","tupletPoint","articulation","articStaccatissimoAbove","articStaccatissimoBelow","tremolo","spacing","offsetYStemUp","offsetYStemDown","offsetXStemUp","offsetXStemDown","grace","stem","noteHead","noteheadTriangleUpHalf","offsetYBaseStemUp","offsetYBaseStemDown","noteheadTriangleUpBlack","noteheadTriangleUpWhole","noteheadXHalf","noteheadXBlack","noteheadXWhole","noteheadBlack","noteheadSquareWhite","coda","segno","flag","tabStem","staveTempo","gClef","fClef","ornament","ornamentTurn","ornamentTurnSlash","arrowheadBlackDown","straight","wiggly","arrowheadBlackUp","textNote","breathMarkTick","breathMarkComma","ornamentTrill","ornamentMordent","ornamentShortTrill","standard","restQuarterStemUp","restQuarterStemDown","custom","Gonville","Petaluma","displaced","noteheadBlackStemUp","noteheadBlackStemDown","noteheadHalfStemUp","noteheadHalfStemDown","noteheadWholeStemUp","noteheadWholeStemDown","Custom","DefaultFontStack","STEM_WIDTH","STEM_HEIGHT","STAVE_LINE_THICKNESS","RESOLUTION","DEFAULT_NOTATION_FONT_SCALE","DEFAULT_TABLATURE_FONT_SCALE","SLASH_NOTEHEAD_WIDTH","TEXT_HEIGHT_OFFSET_HACK","IsKerned","clefProperties","props","values","line_shift","keyProperties","octave_shift","pieces","k","toUpperCase","note_values","octave","int_value","int_val","shift_right","extraProps","glyph_name","customNoteHeads","accidental","rest","integerToNote","integer","noteValue","table","0","1","2","3","4","5","6","7","8","9","10","11","tabToGlyph","fret","shift_y","glyphMetrics","getMetrics","textWidth","getWidth","articulationCodes","artic","articulations","between_lines","aboveCode","belowCode","accidentalCodes","acc","accidentals","parenRightPaddingAdjustment","accidentalColumnsTable","second_on_bottom","spaced_out_tetrachord","spaced_out_pentachord","very_spaced_out_pentachord","spaced_out_hexachord","very_spaced_out_hexachord","ornamentCodes","ornaments","keySignature","spec","keySpec","keySpecs","notes","accidentalList","acc_list","num","unicode","String","fromCharCode","sanitizeDuration","duration","alias","durationAliases","durationToTicks","durations","durationToFraction","parse","durationToNumber","ticks","getGlyphProps","duration_codes","glyphTypeProperties","customGlyphTypeProperties","code_head","common","validTypes","stem_offset","stem_up_extension","stem_down_extension","tabnote_stem_up_extension","tabnote_stem_down_extension","dot_shiftY","line_above","line_below","position","beam_count","code_flag_upstem","code_flag_downstem","TIME4_4","num_beats","beat_value","CanvasContext","vexFlowCanvasContext","WIDTH","HEIGHT","CANVAS_BROWSER_SIZE_LIMIT","clearRect","family","size","weight","background_fillStyle","blur","cap_type","lineCap","dash","lineDash","parseFloat","SanitizeCanvasDims","resize","fillRect","radius","startAngle","endAngle","antiClockwise","glow","measureText","fillText","RaphaelContext","element","paper","Raphael","path","pen","state","font_family","font_size","font_weight","attributes","background_attributes","shadow_attributes","state_stack","transform","setSize","viewBox","attr","normalizeAngle","angle","tmp","delta","arcHelper","cos","sin","largeArcFlag","sweepFlag","out","sa","num_paths","toFixed","opacity","strokeWidth","txt","bounds","getBBox","remove","pop","attrNamesToIgnoreMap","fontAttrNamesToIgnore","SVGContext","svgNS","svg","appendChild","groups","parent","iePolyfill","svgElementType","createElementNS","cls","group","pointerBBox","navigator","ie","test","userAgent","bold","italic","indexOf","replace","fontAttributes","fontSize","fontArray","trim","match","applyAttributes","visibleWidth","visibleHeight","setViewBox","xMin","yMin","viewBoxString","attrNamesToIgnore","nodeName","propertyName","setAttributeNS","lastChild","removeChild","rectangle","add","peth","textContent","ieMeasureTextFix","widthCorrection","lastContext","Renderer","elementId","backend","Backends","CANVAS","bolsterCanvasContext","RAPHAEL","SVG","background","renderer","setBackgroundFillStyle","buildContext","USE_CANVAS_PROXY","methodName","fromX","fromY","toX","toY","dashPattern","dx","dy","atan2","idx","dashLength","nx","ny","VML","NONE","UP","DOWN","devicePixelRatio","Stem","x_begin","x_end","y_top","y_bottom","stem_extension","stem_direction","hide","isStemlet","stemletHeight","renderHeightAdjustment","stem_up_y_offset","stem_down_y_offset","stem_up_y_base_offset","stem_down_y_base_offset","direction","ext","CATEGORY","y_offset","isStemUp","ys","stemHeight","innerMostNoteheadY","outerMostNoteheadY","topY","baseY","isVisible","stem_x","stem_y","y_base_offset","getHeight","DEBUG","stemletYOffset","Tuplet","num_notes","beats_occupied","beatsOccupiedDeprecationWarning","notes_occupied","bracketed","some","note","beam","ratioed","location","LOCATION_TOP","Formatter","AlignRestsToNotes","resolveGlyphs","attach","setTuplet","resetTuplet","LOCATION_BOTTOM","msg","warn","getNotesOccupied","beats","setNotesOccupied","detach","numerator_glyphs","unshift","denom_glyphs","first_note","maxTupletCount","countTuplets","minTupletCount","tupletStack","tuplet","tupletCount","nested_tuplet_y_offset","getNestedTupletCount","NESTING_OFFSET","getStave","getYForLine","top_y","getStemDirection","getStemExtents","bottom_y","last_note","getTieLeftX","getTieRightX","getStemX","getYPosition","addGlyphWidth","reduce","notation_start_x","line_width","x_offset","render","colon_x","colon_radius","calculateStemDirection","lineSum","keyProps","keyProp","BEAM_LEFT","BEAM_BOTH","Beam","auto_stem","getIntrinsicTicks","hasStem","getCategory","memo","setStemDirection","setBeam","postFormatted","getBeamCount","break_on_indices","render_options","beam_width","max_slope","min_slope","slope_iterations","slope_cost","show_stemlets","stemlet_extension","partial_beam_length","flat_beams","min_flat_beam_offset","time_sig","beatTotal","beatValue","voice","generateBeams","getTickables","config","nextGroup","sanitizedGroups","tickGroups","multiply","clone","currentTickGroup","noteGroups","currentGroup","nextTickGroup","unprocessedNote","shouldIgnoreTicks","ticksPerGroup","totalTicks","getTicks","unbeamable","equals","tempGroup","isFirstOrLast","prevNote","breaksOnEachRest","beam_rests","isRest","breaksOnFirstOrLastRest","beam_middle_only","breakOnStemChange","maintain_stem_directions","prevDirection","isUnbeamableDuration","stemDirection","findFirstNote","applyStemDirection","uniqueTuplets","beamedNoteGroups","beamable","allTuplets","beams","secondary_breaks","secondary_break_ticks","flat_beam_offset","setTupletLocation","setBracketed","getGlyph","beamCount","indices","first_x_px","first_y_px","slope","firstNote","initialSlope","lastNote","firstStemTipY","firstStemX","getStemSlope","increment","minCost","MAX_VALUE","bestSlope","totalStemExtension","yShiftTemp","adjustedStemTipY","getSlopeY","stemTipY","diff","idealSlope","cost","total","extremeY","extremeBeamCount","currentExtreme","getYs","offset","extremeTest","newOffset","beamY","getBeamYToDraw","stemX","beamedStemTipY","preBeamExtension","getStem","getExtension","beamExtension","setExtension","totalBeamWidth","setVisibility","setStemlet","prev_tick","tick","next_tick","lookup_duration","prev_note_gets_beam","next_note_gets_beam","note_gets_beam","lookupBeamDirection","tick_of_duration","beam_lines","beam_started","current_beam","previous_should_break","tick_tally","should_break","prev_note","next_note","beam_alone","end","start","beam_direction","last_beam","setContext","valid_beam_durations","beamThickness","beamLines","getBeamLines","j","beam_line","startBeamX","startBeamY","lastBeamX","lastBeamY","calculateFlatSlope","calculateSlope","applyStemExtensions","postFormat","drawStems","drawBeamLines","Voice","time","softmaxFactor","resolutionMultiplier","tickables","ticksUsed","smallestTickCount","largestTickWidth","Mode","STRICT","voiceGroup","SOFT","FULL","bb","setStave","getBoundingBox","mergeWith","g","strict","factor","expTicksUsed","tickable","tickValue","reCalculateExpTicksUsed","v","lessThan","setVoice","addTickable","preFormatted","tickable_bb","drawWithStyle","drawBoldDoubleLine","topX","botY","StaveConnector","BOLD_DOUBLE_LEFT","BOLD_DOUBLE_RIGHT","variableWidth","top_stave","bottom_stave","thickness","DOUBLE","texts","SINGLE_RIGHT","SINGLE_LEFT","SINGLE","BRACE","BRACKET","THIN_DOUBLE","singleRight","singleLeft","single","double","brace","bracket","boldDoubleLeft","boldDoubleRight","thinDouble","none","typeString","content","shift_x","getNumLines","attachment_height","x3","y3","cpx1","cpy1","cpx2","cpy2","cpx3","cpy3","cpx4","cpy4","cpx5","cpy5","cpx6","cpy6","cpx7","cpy7","cpx8","cpy8","renderGlyph","setFont","text_width","getBottomLineY","Tickable","intrinsicTicks","tickMultiplier","tickContext","modifierContext","modifiers","align_center","center_x_shift","ignore_ticks","formatterMetrics","freedom","left","right","iterations","space","used","mean","deviation","isCenterAligned","noteCount","notesOccupied","splice","getNoteCount","applyTickMultiplier","mc","mod","tc","preFormat","Note","noteStruct","initStruct","parseNoteStruct","JSON","stringify","dots","noteType","customTypes","duration_override","setDuration","setIntrinsicTicks","customGlyphs","positions","playNote","leftDisplacedHeadPx","rightDisplacedHeadPx","setCenterAlignment","annotation_spacing","yPos","xStart","getAbsoluteX","modLeftPx","xPre1","xAbs","xPost1","notePx","xPost2","xEnd","modRightPx","xFreedomRight","getFormatterMetrics","xWidth","round","getXShift","yy","spaceDeviation","durationString","result","exec","durationProps","parseDuration","currentTicks","setNote","setIndex","setPreFormatted","setYs","glyph_font_scale","text_line","getYForTopText","modifier","left_shift","right_shift","glyphWidth","getGlyphWidth","getNoteStartX","getCenterXShift","NoteHead","head_options","note_type","StaveNote","STEM_UP","glyph_code","custom_glyph_code","custom_glyph","stem_up_x_offset","stem_down_x_offset","slashed","stroke_px","setWidth","displacementStemAdjustment","fontShift","displacedFontShift","getSpacingBetweenLines","half_spacing","min_y","getLine","setY","getYForNote","head_x","categorySuffix","staveSpace","breve_lines","drawSlashNoteHead","StemmableNote","note_struct","stemExtensionOverride","setStem","shouldRenderFlag","flagCode","getStemExtension","setDirection","getBaseCustomNoteHeadGlyph","offsets","offsetYTopStemUp","offsetYTopStemDown","buildFlag","getExtents","textLine","extents","getYForBottomText","stem_struct","Modifier","Position","LEFT","modifier_context","spacingFromNextModifier","RIGHT","ABOVE","BELOW","above","below","PositionString","subNotes","getTickContext","subNoteXOffset","getSpacingFromNextModifier","subNote","subTickContext","setXOffset","Dot","dot_list","max_shift_map","dot","getNote","getKeyProps","getIndex","getRightDisplacedHeadPx","note_id","dot_shift","x_width","last_line","prev_dotted_space","half_shiftY","setXShift","lineSpace","spacing_between_lines_px","getModifierStartXY","forceFlagRight","shiftRestVertical","dir","isrest","maxLine","minLine","setKeyLine","getKeyLine","use_default_head_x","note_heads","DEFAULT_LEDGER_LINE_OFFSET","calculateKeyProps","buildStem","autoStem","formatByY","notesList","minL","stemMax","getStemLength","stemMin","getStemMinumumLength","maxL","voice_shift","getVoiceShiftWidth","is_displaced","isDisplaced","voices","noteU","noteM","noteL","stemDelta","voiceXShift","lineSpacing","setStemLength","centerRest","hasStave","topNote","bottomNote","topKeys","bottomKeys","topNoteBottomY","noteHeadStyles","buildNoteHeads","setStyle","head","calcNoteDisplacements","step","getKeys","lastLine","lineDiff","noteProps","notehead","Infinity","minY","maxY","halfLineSpacing","frac","isTopNote","resultLine","thisLine","getCenterGlyphX","getNoteHeadBounds","setYBounds","tieStartX","getRightShift","tieEndX","restLine","top","bot","hasFlag","isInnerNoteIndex","ledgerLineStyle","flagStyle","mContext","setModifierContext","addModifier","annotation","setDotShiftY","addDot","getModifiers","setLeftDisplacedHeadPx","setRightDisplacedHeadPx","yTop","yBottom","nonDisplacedX","displacedX","highestLine","lowestLine","highestDisplacedLine","lowestDisplacedLine","highestNonDisplacedLine","lowestNonDisplacedLine","displaced_x","non_displaced_x","highest_line","lowest_line","highest_displaced_line","lowest_displaced_line","highest_non_displaced_line","lowest_non_displaced_line","getNoteHeadBeginX","doubleWidth","min_x","drawLedgerLine","normal","ledgerWidth","getLedgerLineStyle","openGroup","noteheadStyle","closeGroup","noteStemHeight","flagX","flagY","getFlagStyle","stemStruct","xBegin","shouldRenderStem","setX","setNoteHeadXBounds","isChord","drawLedgerLines","drawStem","drawNoteHeads","drawFlag","drawModifiers","FretHandFinger","number","finger","nums","nums_list","shiftLeft","shiftRight","pos","getPosition","getLeftDisplacedHeadPx","shiftL","shiftR","numShiftL","numShiftR","xWidthL","xWidthR","num_shift","numWidth","dot_x","dot_y","Music","major","dorian","mixolydian","minor","scales","root_index","NUM_TONES","interval","isValidNoteValue","noteString","toLowerCase","keyString","noteValues","intervalString","intervals","canonical_notes","intervalValue","isValidIntervalValue","diatonic_intervals","sum","getNoteParts","rootValue","getNoteValue","multiplier","reverse_interval","relativeNoteName","tones","nextNote","getRelativeNoteValue","note1","note2","difference","keySigParts","getKeyParts","scaleName","scaleTypes","keySigString","getScaleTones","noteLocation","root_indices","scaleMap","roots","rootName","noteName","getRelativeNoteName","Accidental","font_scale","parenLeftPadding","parenRightPadding","cautionary","parenLeft","parenRight","leftShift","accList","accLine","lineList","accShift","previousLine","flatLine","dblSharpLine","numAcc","totalColumns","noFurtherConflicts","groupStart","groupEnd","checkCollision","getGroupLine","getGroupLines","indexes","lineDifference","indexA","indexB","item","notColliding","indexPairs","every","lines","groupLength","endCase","groupMember","column","patternLength","collisionDetected","columnWidths","columnXOffsets","totalShift","accCount","lastAccOnLine","line1","line2","clearance","clearanceRequired","collision","tickPositions","tickNoteMap","tickPosition","notesAtPosition","music","createScaleMap","modifiedPitches","processNote","keyIndex","accidentalString","pitch","sameAccidental","previouslyModified","addAccidental","getGraceNotes","fontScale","parenWidth","accX","accY","NoteSubGroup","formatter","setStrict","addTickables","joinVoices","format","getMinTotalWidth","alignSubNotesWithNote","StaveTie","cp1","cp2","text_shift_x","first_x_shift","last_x_shift","tie_spacing","setNotes","first_indices","last_indices","first_ys","last_ys","last_x_px","cp_x","last_y_px","top_cp_y","bottom_cp_y","center_x","getTieStartX","getTieEndX","renderTie","renderText","TabTie","GraceNoteGroup","grace_notes","show_slur","slur","slur_y_shift","gracenote_groups","group_list","gracenote_group","is_stavenote","formatWidth","group_shift","setSpacingFromNextModifier","graceNote","TieClass","Stroke","all_voices","note_end","stroke_spacing","strokes","strokeList","getPositions","strokeShift","BRUSH_DOWN","BRUSH_UP","ROLL_DOWN","ROLL_UP","RASQUEDO_DOWN","RASQUEDO_UP","ARPEGGIO_DIRECTIONLESS","arrow","arrow_shift_x","arrow_y","text_y","line_space","getModifierContext","Type","strokeLine","StringNumber","string_number","dashed","leg","LineEndType","shift_left","num_shiftR","x_widthL","x_widthR","num_width","stem_ext","bottom","STEM_DOWN","len","pattern","drawDashedLine","roundToNearestHalf","mathFn","isWithinLines","getRoundingFunction","ceil","isStaveNote","noteCategory","Articulation","getIncrement","setTextLine","top_text_line","maxWidth","articWidth","builder","articNameToCode","staccato","tenuto","articString","getFactory","canSitBetweenLines","staffSpace","isTab","shouldSitOutsideStaff","initialOffset","isOnStemTip","getInitialOffset","getCode","setOrigin","stemBaseY","getTopY","INITIAL_OFFSET","getBottomY","offsetDirection","noteLine","articLine","snappedLine","snapLineToStaff","TickContext","tickID","currentTick","maxTicks","maxTickable","minTicks","minTickable","xBase","xOffset","tickablesByVoice","glyphPx","totalLeftPx","totalRightPx","tContexts","tContext","contexts","voiceIndex","setTickContext","Ornament","delayed","accidentalUpper","accidentalLower","accidentalLowerPadding","accidentalUpperPadding","accid","stemDir","stemExtents","isPlacedOnNoteheadSide","glyphYBetweenLines","glyphX","glyphY","delayXShift","nextContext","getNextContext","Annotation","justification","Justify","CENTER","vert_justification","VerticalJustify","TOP","CENTER_STEM","center","centerStem","BOTTOM","just","VerticalJustifyString","JustifyString","text_height","has_stem","stem_base","yt","Bend","release","phrase","line_style","bend_width","release_width","updateWidth","bends","last_width","bend","total_width","additional_width","draw_width","bend_height","annotation_y","renderRelease","renderArrowHead","setRawFont","render_x","cp_y","last_bend","last_drawn_width","Vibrato","harsh","vibrato_width","wave_height","wave_width","wave_girth","setVibratoWidth","vibratos","vibrato","vx","vy","renderVibrato","opts","num_waves","ModifierContext","PREFORMAT","POSTFORMAT","formatted","lookAhead","nextRestLine","getLineForRest","createContexts","ContextType","addToContext","getTotalTicks","getMode","isComplete","getResolutionMultiplier","tickToContextMap","tickList","integerTicks","newContext","list","maxIterations","minTotalWidth","hasMinTotalWidth","tickContexts","modiferContexts","contextGaps","gaps","iterationsCompleted","lossHistory","paddingBetween","addToModifierContext","xPos","stavePadding","gap","totalCost","auto_beam","align_rests","setMode","applyAndGetBeams","formatToStave","tabstave","tabnotes","autobeam","notevoice","tabvoice","alignAllNotes","alignTuplets","createTickContexts","contextList","contextMap","getTicksUsed","justifyWidth","renderingContext","evaluate","firstContext","calculateIdealDistances","adjustedJustifyWidth","getTickablesByVoice","backTickable","prevContext","backVoices","matchingVoices","maxNegativeShiftPx","thisTickable","insideLeftEdge","backMetrics","insideRightEdge","expectedDistance","getVoice","softmax","fromTickable","errorPx","fromTickablePx","shiftToIdealDistances","idealDistances","centerX","spaceAccum","negativeSpaceAccum","ideal","negativeShiftPx","getCenterAlignedTickables","targetWidth","actualWidth","prevTick","prevMetrics","currMetrics","durationStats","leftNoteEdge","rightNote","rightMetrics","stats","count","updateStats","totalDeviation","alpha","current","prev","next","move","postFormatContexts","createModifierContexts","setSoftmaxFactor","alignRests","getNoteEndX","StaveModifier","layoutMetrics","BEGIN","END","renderToStave","customShift","setYShift","Barline","TYPE","widths","REPEAT_BEGIN","REPEAT_END","REPEAT_BOTH","paddings","layoutMetricsMap","xMax","paddingLeft","paddingRight","setPosition","setType","repeatBegin","repeatEnd","repeatBoth","setPadding","setLayoutMetrics","drawVerticalBar","drawVerticalEndBar","drawRepeatBar","double_bar","getTopLineTopY","getBottomLineBottomY","begin","dot_radius","Repetition","symbol_type","CODA_LEFT","CODA_RIGHT","SEGNO_LEFT","SEGNO_RIGHT","DC","DC_AL_CODA","DC_AL_FINE","DS","DS_AL_CODA","DS_AL_FINE","FINE","drawCodaFixed","drawSymbolText","drawSignoFixed","num_lines","draw_coda","text_x","symbol_x","vertical_bar_width","StaveSection","section","StaveTempo","tempo","bpm","stem_height","TextNote","superscript","subscript","struct","GLYPHS","smooth","Justification","StaveText","Clef","types","attachment","numLines","getOptions","setPoint","placeGlyphOnLine","KeySignature","cancelKeySpec","alterKeySpec","setKeySig","glyphFontScale","xPositions","paddingForced","nextAcc","accGlyphData","extraWidth","accidentalSpacing","xPosition","cancel_accList","different_types","naturals","cancelled","customLines","cancelAccList","firstAccidentalType","convertToCancelAccList","convertToAlterAccList","endClef","convertAccLines","convertToGlyph","TimeSignature","timeSpec","customPadding","validate_args","fontLineShift","topLine","bottomLine","setTimeSig","timeSig","numbers","assertIsValidFraction","topDigits","botDigits","makeTimeSignatureGlyph","topGlyphs","botGlyphs","topWidth","topGlyph","botWidth","botGlyph","topStartX","botStartX","start_x","parseTimeSpec","Volta","volta","MID","BEGIN_END","vert_height","Stave","end_x","measure","glyph_spacing_px","fill_style","left_bar","right_bar","space_above_staff_ln","space_below_staff_ln","top_text_position","resetLines","BARTYPE","addEndModifier","line_config","visible","bottom_text_position","begBarline","getType","number_t","headroom","clefSpec","clefs","addClef","setClef","keySignatures","addKeySignature","setKeySignature","timeSignatures","addTimeSignature","setTimeSignature","items","order","temp","endBarline","begModifiers","endModifiers","sortByCategory","barlines","keysignatures","timesignatures","getPadding","lastBarlineIdx","getLayoutMetrics","getModifierXShift","isDouble","drawVerticalFixed","top_line","bottom_line","drawVerticalBarFixed","line_number","lines_configuration","TabStave","tab_options","TabNote","tab_struct","draw_stem","ghost","draw_dots","draw_stem_through_stave","stem_extension_override","getStemY","stemDownLine","stemStartLine","shouldDrawFlag","flag_x","flag_y","flag_code","stem_through","stem_lines","unused_strings","up_stem","down_stem","line_spacing","total_lines","strings","containsLastString","containsFirstString","line_ys","string","isTopBound","isBottomBound","getPartialStemLines","strings_used","getUnusedStringGroups","tab_x","render_stem","drawPositions","drawStemThrough","semibrave_rest","VibratoBracket","bracket_data","stop","stop_x","MultiMeasureRest","number_of_measures","show_number","number_line","number_glyph_point","padding_left","padding_right","line_thickness","serif_thickness","use_symbols","symbol_spacing","semibrave_rest_glyph_scale","xs","sbl","serif","lineThicknessHalf","n4","n2","n1","get_semibrave_rest","semibrave_rest_width","yMiddle","drawSymbols","drawLine","ClefNote","clef_obj","abs_x","KeySigNote","TimeSigNote","timeSignature","getTimeSig","TabSlide","first_fret","last_fret","SLIDE_DOWN","SLIDE_UP","slide_direction","slide_y","GraceNote","SCALE","LEDGER_LINE_OFFSET","slash","ret","staveNoteScale","getStaveNoteScale","offsetScale","slashBBox","calcBeamedNotesSlashBBox","noteHeadBounds","defaultStemExtention","defaultOffsetY","slashStemOffset","slashBeamOffset","protrusions","beam_slope","beam_angle","atan","iPointOnBeam","slash_angle","protrusion_stem_dx","protrusion_stem_dy","protrusion_beam_dx","protrusion_beam_dy","stem0X","stemY","GraceTabNote","Tuning","tuningString","setTuning","names","tuningValues","numStrings","noteToInteger","stringNum","fretNum","stringValue","getValueForString","getValueForFret","KeyManager","setKey","keyParts","scaleMapByValue","originalScaleMapByValue","scaleNote","modparts","valueNote","originalValueNote","StaveHairpin","hairpin","left_shift_px","right_shift_px","ppt","pixelsPerTick","l_shift_px","left_shift_ticks","r_shift_px","right_shift_ticks","hairpin_options","setRenderOptions","CRESC","DECRESC","dis","first_y","staff_height","l_shift","r_shift","last_x","first_x","renderHairpin","last_y","Curve","from","to","NEAR_HEAD","position_end","invert","cps","NEAR_TOP","nearHead","nearTop","cp_spacing","metric","end_metric","renderCurve","TextDynamics","text_struct","sequence","glyph_font_size","letter","glyph_data","letter_x","current_letter","drawArrowHead","x0","y0","StaveLine","line_dash","rounded_end","draw_start_arrow","draw_end_arrow","arrowhead_length","arrowhead_angle","text_position_vertical","TextVerticalPosition","text_justification","TextJustification","setLineDash","setLineCap","start_position","end_position","applyLineStyle","first_index","last_index","upwards_slope","notehead_width","point1","point2","end_y","start_y","both_arrows","distance","ratio","angle1","angle2","top_x","line_angle","drawArrowLine","vertical_position","applyFontStyle","drawPedalGlyph","PedalMarking","TEXT","custom_depress_text","custom_release_text","bracket_height","text_margin_right","bracket_line_width","pedal","Styles","MIXED","setCustomText","mixed","depress","prev_x","prev_y","is_pedal_depressed","next_is_same","prev_is_same","drawBracketed","drawText","TextBracket","Positions","show_bracket","underline_superscript","main_width","main_height","super_y","superscript_width","super_height","line_y","BarNote","barline","GhostNote","parameter","Tremolo","isGraceNote","y_spacing","Crescendo","decrescendo","extend_left","extend_right","decresc","tick_context","next_context","begin_x","half_height","reverse","GlyphNote","ignoreTicks","setGlyph","RepeatNote","Parser","flattenMatches","results","matchedString","grammar","errorPos","expect","returnPos","token","noSpace","regexp","RegExp","workingLine","success","incrementPos","rule","maybe","allMatches","oneMatch","localPos","or","gotOne","matchSuccess","matchFail","numMatches","more","expectOne","expectOneOrMore","rules","matchToken","oneOrMore","zeroOrMore","expectZeroOrMore","matches","run","EasyScore","Grammar","LINE","PIECE","PIECES","EOL","CHORDORNOTE","PARAMS","commitPiece","COMMA","DURATION","DOTS","OPTS","CHORD","SINGLENOTE","LPAREN","NOTES","RPAREN","addChord","NOTE","NOTENAME","ACCIDENTAL","OCTAVE","addSingleNote","ACCIDENTALS","DOT","setNoteDots","SLASH","MAYBESLASH","TYPES","setNoteType","DURATIONS","setNoteDuration","LBRACKET","KEYVAL","KEYVALS","RBRACKET","KEY","EQUALS","VAL","addNoteOption","SVAL","DVAL","Builder","commitHooks","elements","rollingDuration","resetPiece","commitHook","piece","chord","addNote","accids","addDotToAll","setId","setClass","addClass","defaults","easyScoreHook","throwOnError","parser","addCommitHook","getElements","voiceOptions","setDefaults","default_options","Factory","face","renderQ","systems","staves","initRenderer","ghostNote","textNoteStruct","barNote","clefNote","timeSigNote","keySigNote","cancelKey","alterKey","vJustify","hJustify","fontFamily","fontWeight","setJustification","setVerticalJustification","fingering","stringNumber","multimeasurerest","connector","secondaryBeamBreaks","breakSecondaryAt","curve","tie","setText","vibratoBracket","setLine","setHarsh","textBracket","system","System","StylesString","isRendered","spaceBetweenStaves","noJustification","debugFormatter","formatIterations","noPadding","details","spaceAbove","spaceBelow","debugNoteMetrics","startX","allVoices","debugNoteMetricsYs","part","setNoteStartX","tune","lastY","plotDebugging","plotMetrics"],"mappings":"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","file":"vexflow-min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Vex\"] = factory();\n\telse\n\t\troot[\"Vex\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements utility methods used by the rest of the VexFlow\n// codebase.\n//\n\n/* eslint max-classes-per-file: \"off\" */\n\nconst Vex = () => { };\n\n// Default log function sends all arguments to console.\nVex.L = (block, args) => {\n if (!args) return;\n const line = Array.prototype.slice.call(args).join(' ');\n window.console.log(block + ': ' + line);\n};\n\nVex.MakeException = (name) => {\n const exception = class extends Error {\n constructor(message, data) {\n super(message);\n this.name = name;\n this.message = message;\n this.data = data;\n }\n };\n\n return exception;\n};\n\n// Default runtime exception.\nclass RuntimeError {\n constructor(code, message) {\n this.code = code;\n this.message = message;\n }\n\n toString() {\n return '[RuntimeError] ' + this.code + ':' + this.message;\n }\n}\n\n// Shortcut method for `RuntimeError`.\nVex.RuntimeError = RuntimeError;\nVex.RERR = Vex.RuntimeError;\n\n// Merge `destination` hash with `source` hash, overwriting like keys\n// in `source` if necessary.\nVex.Merge = (destination, source) => {\n for (const property in source) { // eslint-disable-line guard-for-in\n destination[property] = source[property];\n }\n return destination;\n};\n\n// DEPRECATED. Use `Math.*`.\nVex.Min = Math.min;\nVex.Max = Math.max;\nVex.forEach = (a, fn) => {\n for (let i = 0; i < a.length; i++) {\n fn(a[i], i);\n }\n};\n\n// Round number to nearest fractional value (`.5`, `.25`, etc.)\nVex.RoundN = (x, n) =>\n (x % n) >= (n / 2)\n ? parseInt(x / n, 10) * n + n\n : parseInt(x / n, 10) * n;\n\n// Locate the mid point between stave lines. Returns a fractional line if a space.\nVex.MidLine = (a, b) => {\n let mid_line = b + (a - b) / 2;\n if (mid_line % 2 > 0) {\n mid_line = Vex.RoundN(mid_line * 10, 5) / 10;\n }\n return mid_line;\n};\n\n// Take `arr` and return a new list consisting of the sorted, unique,\n// contents of arr. Does not modify `arr`.\nVex.SortAndUnique = (arr, cmp, eq) => {\n if (arr.length > 1) {\n const newArr = [];\n let last;\n arr.sort(cmp);\n\n for (let i = 0; i < arr.length; ++i) {\n if (i === 0 || !eq(arr[i], last)) {\n newArr.push(arr[i]);\n }\n last = arr[i];\n }\n\n return newArr;\n } else {\n return arr;\n }\n};\n\n// Check if array `a` contains `obj`.\nVex.Contains = (a, obj) => {\n let i = a.length;\n while (i--) {\n if (a[i] === obj) {\n return true;\n }\n }\n return false;\n};\n\n// Get the 2D Canvas context from DOM element `canvas_sel`.\nVex.getCanvasContext = canvas_sel => {\n if (!canvas_sel) {\n throw new Vex.RERR('BadArgument', 'Invalid canvas selector: ' + canvas_sel);\n }\n\n const canvas = document.getElementById(canvas_sel);\n if (!(canvas && canvas.getContext)) {\n throw new Vex.RERR(\n 'UnsupportedBrowserError', 'This browser does not support HTML5 Canvas'\n );\n }\n\n return canvas.getContext('2d');\n};\n\n// Draw a tiny dot marker on the specified canvas. A great debugging aid.\n//\n// `ctx`: Canvas context.\n// `x`, `y`: Dot coordinates.\nVex.drawDot = (ctx, x, y, color = '#55') => {\n ctx.save();\n ctx.setFillStyle(color);\n\n // draw a circle\n ctx.beginPath();\n ctx.arc(x, y, 3, 0, Math.PI * 2, true);\n ctx.closePath();\n ctx.fill();\n ctx.restore();\n};\n\n// Benchmark. Run function `f` once and report time elapsed shifted by `s` milliseconds.\nVex.BM = (s, f) => {\n const start_time = new Date().getTime();\n f();\n const elapsed = new Date().getTime() - start_time;\n Vex.L(s + elapsed + 'ms');\n};\n\n// Get stack trace.\nVex.StackTrace = () => {\n const err = new Error();\n return err.stack;\n};\n\n// Dump warning to console.\nVex.W = (...args) => {\n const line = args.join(' ');\n window.console.log('Warning: ', line, Vex.StackTrace());\n};\n\n// Used by various classes (e.g., SVGContext) to provide a\n// unique prefix to element names (or other keys in shared namespaces).\nVex.Prefix = text => Vex.Prefix.prefix + text;\nVex.Prefix.prefix = 'vf-';\n\nexport { Vex };\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Fraction class that represents a rational number\n//\n// @author zz85\n// @author incompleteopus (modifications)\n\n/* eslint-disable no-underscore-dangle */\n\nimport { Vex } from './vex';\nexport class Fraction {\n /**\n * GCD: Find greatest common divisor using Euclidean algorithm\n */\n static GCD(a, b) {\n if (typeof a !== 'number' || typeof b !== 'number') {\n throw new Vex.RERR('BadArgument', `Invalid numbers: ${a}, ${b}`);\n }\n\n let t;\n\n while (b !== 0) {\n t = b;\n b = a % b;\n a = t;\n }\n\n return a;\n }\n\n /**\n * LCM: Lowest common multiple\n */\n static LCM(a, b) {\n return ((a * b) / Fraction.GCD(a, b));\n }\n\n /**\n * LCMM: Lowest common multiple for more than two numbers\n */\n static LCMM(args) {\n if (args.length === 0) {\n return 0;\n } else if (args.length === 1) {\n return args[0];\n } else if (args.length === 2) {\n return Fraction.LCM(args[0], args[1]);\n } else {\n const arg0 = args[0];\n args.shift();\n return Fraction.LCM(arg0, Fraction.LCMM(args));\n }\n }\n\n constructor(numerator, denominator) {\n this.set(numerator, denominator);\n }\n set(numerator, denominator) {\n this.numerator = numerator === undefined ? 1 : numerator;\n this.denominator = denominator === undefined ? 1 : denominator;\n return this;\n }\n value() {\n return this.numerator / this.denominator;\n }\n simplify() {\n let u = this.numerator;\n let d = this.denominator;\n\n const gcd = Fraction.GCD(u, d);\n u /= gcd;\n d /= gcd;\n\n if (d < 0) {\n d = -d;\n u = -u;\n }\n return this.set(u, d);\n }\n add(param1, param2) {\n let otherNumerator;\n let otherDenominator;\n\n if (param1 instanceof Fraction) {\n otherNumerator = param1.numerator;\n otherDenominator = param1.denominator;\n } else {\n if (param1 !== undefined) {\n otherNumerator = param1;\n } else {\n otherNumerator = 0;\n }\n\n if (param2 !== undefined) {\n otherDenominator = param2;\n } else {\n otherDenominator = 1;\n }\n }\n\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n\n const u = this.numerator * a + otherNumerator * b;\n return this.set(u, lcm);\n }\n subtract(param1, param2) {\n let otherNumerator;\n let otherDenominator;\n\n if (param1 instanceof Fraction) {\n otherNumerator = param1.numerator;\n otherDenominator = param1.denominator;\n } else {\n if (param1 !== undefined) {\n otherNumerator = param1;\n } else {\n otherNumerator = 0;\n }\n\n if (param2 !== undefined) {\n otherDenominator = param2;\n } else {\n otherDenominator = 1;\n }\n }\n\n const lcm = Fraction.LCM(this.denominator, otherDenominator);\n const a = lcm / this.denominator;\n const b = lcm / otherDenominator;\n\n const u = this.numerator * a - otherNumerator * b;\n return this.set(u, lcm);\n }\n multiply(param1, param2) {\n let otherNumerator;\n let otherDenominator;\n\n if (param1 instanceof Fraction) {\n otherNumerator = param1.numerator;\n otherDenominator = param1.denominator;\n } else {\n if (param1 !== undefined) {\n otherNumerator = param1;\n } else {\n otherNumerator = 1;\n }\n\n if (param2 !== undefined) {\n otherDenominator = param2;\n } else {\n otherDenominator = 1;\n }\n }\n\n return this.set(this.numerator * otherNumerator, this.denominator * otherDenominator);\n }\n divide(param1, param2) {\n let otherNumerator;\n let otherDenominator;\n\n if (param1 instanceof Fraction) {\n otherNumerator = param1.numerator;\n otherDenominator = param1.denominator;\n } else {\n if (param1 !== undefined) {\n otherNumerator = param1;\n } else {\n otherNumerator = 1;\n }\n\n if (param2 !== undefined) {\n otherDenominator = param2;\n } else {\n otherDenominator = 1;\n }\n }\n\n return this.set(this.numerator * otherDenominator, this.denominator * otherNumerator);\n }\n\n // Simplifies both sides and checks if they are equal.\n equals(compare) {\n const a = Fraction.__compareA.copy(compare).simplify();\n const b = Fraction.__compareB.copy(this).simplify();\n\n return (a.numerator === b.numerator) && (a.denominator === b.denominator);\n }\n\n // Greater than operator.\n greaterThan(compare) {\n const a = Fraction.__compareB.copy(this);\n a.subtract(compare);\n return (a.numerator > 0);\n }\n\n // Greater than or equals operator.\n greaterThanEquals(compare) {\n const a = Fraction.__compareB.copy(this);\n a.subtract(compare);\n return (a.numerator >= 0);\n }\n\n // Less than operator.\n lessThan(compare) {\n return !(this.greaterThanEquals(compare));\n }\n\n // Less than or equals operator.\n lessThanEquals(compare) {\n return !(this.greaterThan(compare));\n }\n\n // Creates a new copy with this current values.\n clone() {\n return new Fraction(this.numerator, this.denominator);\n }\n\n // Copies value of another Fraction into itself.\n copy(copy) {\n if (typeof copy === 'number') {\n return this.set(copy || 0, 1);\n }\n return this.set(copy.numerator, copy.denominator);\n }\n\n // Returns the integer component eg. (4/2) == 2\n quotient() {\n return Math.floor(this.numerator / this.denominator);\n }\n\n // Returns the fraction component when reduced to a mixed number\n fraction() {\n return this.numerator % this.denominator;\n }\n\n // Returns the absolute value\n abs() {\n this.denominator = Math.abs(this.denominator);\n this.numerator = Math.abs(this.numerator);\n return this;\n }\n\n // Returns a raw string representation\n toString() {\n return this.numerator + '/' + this.denominator;\n }\n\n // Returns a simplified string respresentation\n toSimplifiedString() {\n return Fraction.__tmp.copy(this).simplify().toString();\n }\n\n // Returns string representation in mixed form\n toMixedString() {\n let s = '';\n const q = this.quotient();\n const f = Fraction.__tmp.copy(this);\n\n if (q < 0) {\n f.abs().fraction();\n } else {\n f.fraction();\n }\n\n if (q !== 0) {\n s += q;\n\n if (f.numerator !== 0) {\n s += ' ' + f.toSimplifiedString();\n }\n } else {\n if (f.numerator === 0) {\n s = '0';\n } else {\n s = f.toSimplifiedString();\n }\n }\n\n return s;\n }\n\n // Parses a fraction string\n parse(str) {\n const i = str.split('/');\n const n = parseInt(i[0], 10);\n const d = (i[1]) ? parseInt(i[1], 10) : 1;\n\n return this.set(n, d);\n }\n}\n\n// Temporary cached objects\nFraction.__compareA = new Fraction();\nFraction.__compareB = new Fraction();\nFraction.__tmp = new Fraction();\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a registry for VexFlow elements. It allows users\n// to track, query, and manage some subset of generated elements, and\n// dynamically get and set attributes.\n//\n// There are two ways to regiser with a registry:\n//\n// 1) Explicitly call `element.register(registry)`, or,\n// 2) Call `Registry.enableDefaultRegistry(registry)` when ready, and all future\n// elements will automatically register with it.\n//\n// Once an element is registered, selected attributes are tracked and indexed by\n// the registry. This allows fast look up of elements by attributes like id, type,\n// and class.\n\nimport { Vex } from './vex';\n\nexport const X = Vex.MakeException('RegistryError');\n\nfunction setIndexValue(index, name, value, id, elem) {\n if (!index[name][value]) index[name][value] = {};\n index[name][value][id] = elem;\n}\n\nexport class Registry {\n static get INDEXES() { return ['type']; }\n\n constructor() {\n this.clear();\n }\n\n // If you call `enableDefaultRegistry`, any new elements will auto-register with\n // the provided registry as soon as they're constructed.\n static enableDefaultRegistry(registry) {\n Registry.defaultRegistry = registry;\n }\n\n static getDefaultRegistry() {\n return Registry.defaultRegistry;\n }\n\n static disableDefaultRegistry() {\n Registry.defaultRegistry = null;\n }\n\n clear() {\n // Indexes are represented as maps of maps (of maps). This allows\n // for both multi-labeling (e.g., an element can have multiple classes)\n // and efficient lookup.\n this.index = {\n id: {},\n type: {},\n class: {},\n };\n return this;\n }\n\n // Updates the indexes for element 'id'. If an element's attribute changes\n // from A -> B, make sure to remove the element from A.\n updateIndex({ id, name, value, oldValue }) {\n const elem = this.getElementById(id);\n if (oldValue !== null && this.index[name][oldValue]) {\n delete this.index[name][oldValue][id];\n }\n if (value !== null) {\n setIndexValue(this.index, name, value, elem.getAttribute('id'), elem);\n }\n }\n\n // Register element `elem` with this registry. This adds the element to its index and watches\n // it for attribute changes.\n register(elem, id) {\n id = id || elem.getAttribute('id');\n\n if (!id) {\n throw new X('Can\\'t add element without `id` attribute to registry', elem);\n }\n\n // Manually add id to index, then update other indexes.\n elem.setAttribute('id', id);\n setIndexValue(this.index, 'id', id, id, elem);\n Registry.INDEXES.forEach(name => {\n this.updateIndex({ id, name, value: elem.getAttribute(name), oldValue: null });\n });\n elem.onRegister(this);\n return this;\n }\n\n getElementById(id) {\n return this.index.id[id] ? this.index.id[id][id] : null;\n }\n\n getElementsByAttribute(attrName, value) {\n const index = this.index[attrName];\n if (index && index[value]) {\n return Object.keys(index[value]).map(i => index[value][i]);\n } else {\n return [];\n }\n }\n\n getElementsByType(type) { return this.getElementsByAttribute('type', type); }\n getElementsByClass(className) { return this.getElementsByAttribute('class', className); }\n\n // This is called by the element when an attribute value changes. If an indexed\n // attribute changes, then update the local index.\n onUpdate({ id, name, value, oldValue }) {\n function includes(array, value) {\n return array.filter(x => x === value).length > 0;\n }\n\n if (!includes(Registry.INDEXES.concat(['id', 'class']), name)) return this;\n this.updateIndex({ id, name, value, oldValue });\n return this;\n }\n}\n\nRegistry.defaultRegistry = null;\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a generic base class for VexFlow, with implementations\n// of general functions and properties that can be inherited by all VexFlow elements.\n\nimport { Vex } from './vex';\nimport { Registry } from './registry';\nimport { Flow } from './tables';\n\nexport class Element {\n static newID() { return 'auto' + (Element.ID++); }\n\n constructor({ type } = {}) {\n this.attrs = {\n id: Element.newID(),\n el: null,\n type: type || 'Base',\n classes: {},\n };\n\n this.boundingBox = null;\n this.context = null;\n this.rendered = false;\n this.fontStack = Flow.DEFAULT_FONT_STACK;\n this.musicFont = Flow.DEFAULT_FONT_STACK[0];\n\n // If a default registry exist, then register with it right away.\n if (Registry.getDefaultRegistry()) {\n Registry.getDefaultRegistry().register(this);\n }\n }\n\n // set music font\n setFontStack(fontStack) {\n this.fontStack = fontStack;\n this.musicFont = fontStack[0];\n return this;\n }\n getFontStack() {\n return this.fontStack;\n }\n\n // set the draw style of a stemmable note:\n setStyle(style) { this.style = style; return this; }\n getStyle() { return this.style; }\n\n // Apply current style to Canvas `context`\n applyStyle(context = this.context, style = this.getStyle()) {\n if (!style) return this;\n\n context.save();\n if (style.shadowColor) context.setShadowColor(style.shadowColor);\n if (style.shadowBlur) context.setShadowBlur(style.shadowBlur);\n if (style.fillStyle) context.setFillStyle(style.fillStyle);\n if (style.strokeStyle) context.setStrokeStyle(style.strokeStyle);\n if (style.lineWidth) context.setLineWidth(style.lineWidth);\n return this;\n }\n\n restoreStyle(context = this.context, style = this.getStyle()) {\n if (!style) return this;\n context.restore();\n return this;\n }\n\n // draw with style of an element.\n drawWithStyle() {\n this.checkContext();\n this.applyStyle();\n this.draw();\n this.restoreStyle();\n }\n\n // An element can have multiple class labels.\n hasClass(className) { return (this.attrs.classes[className] === true); }\n addClass(className) {\n this.attrs.classes[className] = true;\n if (this.registry) {\n this.registry.onUpdate({\n id: this.getAttribute('id'),\n name: 'class',\n value: className,\n oldValue: null,\n });\n }\n return this;\n }\n\n removeClass(className) {\n delete this.attrs.classes[className];\n if (this.registry) {\n this.registry.onUpdate({\n id: this.getAttribute('id'),\n name: 'class',\n value: null,\n oldValue: className,\n });\n }\n return this;\n }\n\n // This is called by the registry after the element is registered.\n onRegister(registry) { this.registry = registry; return this; }\n isRendered() { return this.rendered; }\n setRendered(rendered = true) { this.rendered = rendered; return this; }\n\n getAttributes() { return this.attrs; }\n getAttribute(name) { return this.attrs[name]; }\n setAttribute(name, value) {\n const id = this.attrs.id;\n const oldValue = this.attrs[name];\n this.attrs[name] = value;\n if (this.registry) {\n // Register with old id to support id changes.\n this.registry.onUpdate({ id, name, value, oldValue });\n }\n return this;\n }\n\n getContext() { return this.context; }\n setContext(context) { this.context = context; return this; }\n getBoundingBox() { return this.boundingBox; }\n\n // Validators\n checkContext() {\n if (!this.context) {\n throw new Vex.RERR('NoContext', 'No rendering context attached to instance');\n }\n return this.context;\n }\n}\n\nElement.ID = 1000;\n","// ## Description\n//\n// Object which computes metrics for a bounding box by continuously\n// taking canvas path commands\n\n// Warning: This file is merely a crutch to get bounding box information without\n// explicit metadata. This is likely to get deprecated following SMuFL support.\n//\n// taken from: https://github.com/gabelerner/canvg/blob/860e418aca67b9a41e858a223d74d375793ec364/ca\n// nvg.js#L449\n\nexport class BoundingBoxComputation {\n constructor(x1, y1, x2, y2) { // pass in initial points if you want\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n\n this.addPoint(x1, y1);\n this.addPoint(x2, y2);\n }\n\n width() {\n return this.x2 - this.x1;\n }\n\n height() {\n return this.y2 - this.y1;\n }\n\n noOp() {\n // do nothing\n }\n\n addPoint(x, y) {\n if (x != null) {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n if (x < this.x1) this.x1 = x;\n if (x > this.x2) this.x2 = x;\n }\n\n if (y != null) {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n if (y < this.y1) this.y1 = y;\n if (y > this.y2) this.y2 = y;\n }\n }\n\n addX(x) {\n this.addPoint(x, null);\n }\n\n addY(y) {\n this.addPoint(null, y);\n }\n\n addQuadraticCurve(p0x, p0y, p1x, p1y, p2x, p2y) {\n const cp1x = p0x + 2 / 3 * (p1x - p0x); // CP1 = QP0 + 2/3 *(QP1-QP0)\n const cp1y = p0y + 2 / 3 * (p1y - p0y); // CP1 = QP0 + 2/3 *(QP1-QP0)\n const cp2x = cp1x + 1 / 3 * (p2x - p0x); // CP2 = CP1 + 1/3 *(QP2-QP0)\n const cp2y = cp1y + 1 / 3 * (p2y - p0y); // CP2 = CP1 + 1/3 *(QP2-QP0)\n this.addBezierCurve(p0x, p0y, cp1x, cp1y, cp2x, cp2y, p2x, p2y);\n }\n\n addBezierCurve(p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y) {\n // from http://blog.hackers-cafe.net/2009/06/how-to-calculate-bezier-curves-bounding.html\n const p0 = [p0x, p0y];\n const p1 = [p1x, p1y];\n const p2 = [p2x, p2y];\n const p3 = [p3x, p3y];\n let i;\n\n this.addPoint(p0[0], p0[1]);\n this.addPoint(p3[0], p3[1]);\n\n const f = (t, i) => Math.pow(1 - t, 3) * p0[i] +\n 3 * Math.pow(1 - t, 2) * t * p1[i] +\n 3 * (1 - t) * Math.pow(t, 2) * p2[i] +\n Math.pow(t, 3) * p3[i];\n\n for (i = 0; i <= 1; i++) {\n const b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n const a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n const c = 3 * p1[i] - 3 * p0[i];\n\n if (a === 0) {\n if (b === 0) continue;\n const t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) this.addX(f(t, i));\n if (i === 1) this.addY(f(t, i));\n }\n continue;\n }\n\n const b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) continue;\n const t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) this.addX(f(t1, i));\n if (i === 1) this.addY(f(t1, i));\n }\n const t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) this.addX(f(t2, i));\n if (i === 1) this.addY(f(t2, i));\n }\n }\n }\n}\n","// Vex Music Notation\n// Mohit Muthanna \n//\n// Copyright Mohit Muthanna 2010\n\n// Bounding boxes for interactive notation\n\nexport class BoundingBox {\n static copy(that) {\n return new BoundingBox(that.x, that.y, that.w, that.h);\n }\n\n constructor(x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n }\n getX() { return this.x; }\n getY() { return this.y; }\n getW() { return this.w; }\n getH() { return this.h; }\n setX(x) { this.x = x; return this; }\n setY(y) { this.y = y; return this; }\n setW(w) { this.w = w; return this; }\n setH(h) { this.h = h; return this; }\n move(x, y) { this.x += x; this.y += y; }\n clone() { return BoundingBox.copy(this); }\n\n // Merge my box with given box. Creates a bigger bounding box unless\n // the given box is contained in this one.\n mergeWith(boundingBox, ctx) {\n const that = boundingBox;\n\n const new_x = this.x < that.x ? this.x : that.x;\n const new_y = this.y < that.y ? this.y : that.y;\n const new_w = Math.max(this.x + this.w, that.x + that.w) - new_x;\n const new_h = Math.max(this.y + this.h, that.y + that.h) - new_y;\n\n this.x = new_x;\n this.y = new_y;\n this.w = new_w;\n this.h = new_h;\n\n if (ctx) this.draw(ctx);\n return this;\n }\n\n draw(ctx, x, y) {\n if (!x) x = 0;\n if (!y) y = 0;\n ctx.rect(this.x + x, this.y + y, this.w, this.h);\n ctx.stroke();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Element } from './element';\nimport { BoundingBoxComputation } from './boundingboxcomputation';\nimport { BoundingBox } from './boundingbox';\n\nfunction processOutline(outline, originX, originY, scaleX, scaleY, outlineFns) {\n let command;\n let x;\n let y;\n let i = 0;\n\n function nextX() { return originX + outline[i++] * scaleX; }\n function nextY() { return originY + outline[i++] * scaleY; }\n function doOutline(command, ...args) {\n outlineFns[command](...args);\n }\n\n while (i < outline.length) {\n command = outline[i++];\n switch (command) {\n case 'm':\n case 'l':\n doOutline(command, nextX(), nextY());\n break;\n case 'q':\n x = nextX();\n y = nextY();\n doOutline(command, nextX(), nextY(), x, y);\n break;\n case 'b':\n x = nextX();\n y = nextY();\n doOutline(command, nextX(), nextY(), nextX(), nextY(), x, y);\n break;\n case 'z':\n break;\n default:\n break;\n }\n }\n}\n\nexport class Glyph extends Element {\n /*\n Static methods used to implement loading and rendering glyphs.\n\n Below categoryPath can be any metric path under 'glyphs', so stem.up would respolve\n to glyphs.stem.up.shifX, glyphs.stem.up.shiftY, etc.\n */\n static lookupFontMetric({ font, category, code, key, defaultValue }) {\n let value = font.lookupMetric(`glyphs.${category}.${code}.${key}`, null);\n if (value === null) {\n value = font.lookupMetric(`glyphs.${category}.${key}`, defaultValue);\n }\n return value;\n }\n\n static lookupGlyph(fontStack, code) {\n if (!fontStack) {\n throw Vex.RERR('BAD_FONTSTACK', 'Font stack is misconfigured');\n }\n\n let glyph;\n let font;\n for (let i = 0; i < fontStack.length; i++) {\n font = fontStack[i];\n glyph = font.getGlyphs()[code];\n if (glyph) break;\n }\n\n if (!glyph) {\n throw new Vex.RERR('BadGlyph', `Glyph ${code} does not exist in font.`);\n }\n\n return { glyph, font };\n }\n\n\n static loadMetrics(fontStack, code, category = null) {\n const { glyph, font } = Glyph.lookupGlyph(fontStack, code);\n\n const x_shift = category ? Glyph.lookupFontMetric({\n font, category, code,\n key: 'shiftX', defaultValue: 0\n }) : 0;\n const y_shift = category ? Glyph.lookupFontMetric({\n font, category, code,\n key: 'shiftY', defaultValue: 0\n }) : 0;\n const scale = category ? Glyph.lookupFontMetric({\n font, category, code,\n key: 'scale', defaultValue: 1\n }) : 1;\n\n const x_min = glyph.x_min;\n const x_max = glyph.x_max;\n const ha = glyph.ha;\n\n let outline;\n\n const CACHE = true;\n if (glyph.o) {\n if (CACHE) {\n if (glyph.cached_outline) {\n outline = glyph.cached_outline;\n } else {\n outline = glyph.o.split(' ');\n glyph.cached_outline = outline;\n }\n } else {\n if (glyph.cached_outline) delete glyph.cached_outline;\n outline = glyph.o.split(' ');\n }\n\n return {\n x_min,\n x_max,\n x_shift,\n y_shift,\n scale,\n ha,\n outline,\n font,\n };\n } else {\n throw new Vex.RERR('BadGlyph', `Glyph ${code} has no outline defined.`);\n }\n }\n\n /**\n * A quick and dirty static glyph renderer. Renders glyphs from the default\n * font defined in Vex.Flow.Font.\n *\n * @param {!Object} ctx The canvas context.\n * @param {number} x_pos X coordinate.\n * @param {number} y_pos Y coordinate.\n * @param {number} point The point size to use.\n * @param {string} val The glyph code in font.getGlyphs()\n */\n static renderGlyph(ctx, x_pos, y_pos, point, val, options) {\n const params = {\n fontStack: Flow.DEFAULT_FONT_STACK,\n category: null,\n ...options\n };\n const metrics = Glyph.loadMetrics(params.fontStack, val, params.category);\n point = params.category ? Glyph.lookupFontMetric({\n font: metrics.font,\n category: params.category,\n code: val,\n key: 'point',\n defaultValue: point\n }) : point;\n const scale = point * 72.0 / (metrics.font.getResolution() * 100.0);\n\n Glyph.renderOutline(ctx, metrics.outline, scale * metrics.scale, x_pos + metrics.x_shift, y_pos + metrics.y_shift, options);\n return metrics;\n }\n\n static renderOutline(ctx, outline, scale, x_pos, y_pos, options) {\n ctx.beginPath();\n ctx.moveTo(x_pos, y_pos);\n processOutline(outline, x_pos, y_pos, scale, -scale, {\n m: ctx.moveTo.bind(ctx),\n l: ctx.lineTo.bind(ctx),\n q: ctx.quadraticCurveTo.bind(ctx),\n b: ctx.bezierCurveTo.bind(ctx),\n // z: ctx.fill.bind(ctx), // ignored\n }, options);\n ctx.fill();\n }\n\n static getOutlineBoundingBox(outline, scale, x_pos, y_pos) {\n const bboxComp = new BoundingBoxComputation();\n\n processOutline(outline, x_pos, y_pos, scale, -scale, {\n m: bboxComp.addPoint.bind(bboxComp),\n l: bboxComp.addPoint.bind(bboxComp),\n q: bboxComp.addQuadraticCurve.bind(bboxComp),\n b: bboxComp.addBezierCurve.bind(bboxComp),\n z: bboxComp.noOp.bind(bboxComp),\n });\n\n return new BoundingBox(\n bboxComp.x1,\n bboxComp.y1,\n bboxComp.width(),\n bboxComp.height()\n );\n }\n\n /**\n * @constructor\n */\n constructor(code, point, options) {\n super();\n this.setAttribute('type', 'Glyph');\n\n this.code = code;\n this.point = point;\n this.options = {\n fontStack: this.getFontStack(),\n category: null,\n };\n\n this.metrics = null;\n this.x_shift = 0;\n this.y_shift = 0;\n\n this.originShift = {\n x: 0,\n y: 0,\n };\n\n if (options) {\n this.setOptions(options);\n } else {\n this.reset();\n }\n }\n\n getCode() {\n return this.code;\n }\n\n setOptions(options) {\n this.options = { ...this.options, ...options };\n this.reset();\n }\n\n setPoint(point) { this.point = point; return this; }\n setStave(stave) { this.stave = stave; return this; }\n setXShift(x_shift) { this.x_shift = x_shift; return this; }\n setYShift(y_shift) { this.y_shift = y_shift; return this; }\n\n reset() {\n this.metrics = Glyph.loadMetrics(this.options.fontStack, this.code, this.options.category);\n // Override point from metrics file\n this.point = this.options.category ? Glyph.lookupFontMetric({\n category: this.options.category,\n font: this.metrics.font,\n code: this.code,\n key: 'point',\n defaultValue: this.point,\n }) : this.point;\n\n this.scale = this.point * 72 / (this.metrics.font.getResolution() * 100);\n this.bbox = Glyph.getOutlineBoundingBox(\n this.metrics.outline,\n this.scale * this.metrics.scale,\n this.metrics.x_shift,\n this.metrics.y_shift,\n );\n }\n\n getMetrics() {\n if (!this.metrics) {\n throw new Vex.RuntimeError('BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n\n return {\n x_min: this.metrics.x_min * this.scale * this.metrics.scale,\n x_max: this.metrics.x_max * this.scale * this.metrics.scale,\n width: this.bbox.getW(),\n height: this.bbox.getH(),\n };\n }\n\n setOriginX(x) {\n const { bbox } = this;\n const originX = Math.abs(bbox.getX() / bbox.getW());\n const xShift = (x - originX) * bbox.getW();\n this.originShift.x = -xShift;\n }\n\n setOriginY(y) {\n const { bbox } = this;\n const originY = Math.abs(bbox.getY() / bbox.getH());\n const yShift = (y - originY) * bbox.getH();\n this.originShift.y = -yShift;\n }\n\n setOrigin(x, y) {\n this.setOriginX(x);\n this.setOriginY(y);\n }\n\n render(ctx, x, y) {\n if (!this.metrics) {\n throw new Vex.RuntimeError('BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n\n const outline = this.metrics.outline;\n const scale = this.scale * this.metrics.scale;\n\n this.setRendered();\n this.applyStyle(ctx);\n Glyph.renderOutline(ctx, outline, scale,\n x + this.originShift.x + this.metrics.x_shift,\n y + this.originShift.y + this.metrics.y_shift);\n this.restoreStyle(ctx);\n }\n\n renderToStave(x) {\n this.checkContext();\n\n if (!this.metrics) {\n throw new Vex.RuntimeError('BadGlyph', `Glyph ${this.code} is not initialized.`);\n }\n\n if (!this.stave) {\n throw new Vex.RuntimeError('GlyphError', 'No valid stave');\n }\n\n const outline = this.metrics.outline;\n const scale = this.scale * this.metrics.scale;\n\n this.setRendered();\n this.applyStyle();\n Glyph.renderOutline(this.context, outline, scale,\n x + this.x_shift + this.metrics.x_shift, this.stave.getYForGlyphs() + this.y_shift + this.metrics.y_shift);\n this.restoreStyle();\n }\n}\n","import { Vex } from './vex';\nimport { BravuraFont } from './fonts/bravura_glyphs';\nimport { BravuraMetrics } from './fonts/bravura_metrics';\nimport { GonvilleFont } from './fonts/gonville_glyphs';\nimport { GonvilleMetrics } from './fonts/gonville_metrics';\nimport { PetalumaFont } from './fonts/petaluma_glyphs';\nimport { PetalumaMetrics } from './fonts/petaluma_metrics';\nimport { CustomFont } from './fonts/custom_glyphs';\nimport { CustomMetrics } from './fonts/custom_metrics';\n\nclass Font {\n constructor(name, metrics, fontData) {\n this.name = name;\n this.metrics = metrics;\n this.fontData = fontData;\n this.codePoints = {};\n }\n\n getName() {\n return this.name;\n }\n\n getResolution() {\n return this.fontData.resolution;\n }\n\n getMetrics() {\n return this.metrics;\n }\n\n lookupMetric(key, defaultValue = undefined) {\n const parts = key.split('.');\n let val = this.metrics;\n // console.log('lookupMetric:', key);\n for (let i = 0; i < parts.length; i++) {\n if (val[parts[i]] === undefined) {\n if (defaultValue !== undefined) {\n return defaultValue;\n } else {\n throw new Vex.RERR('INVALID_KEY', `Invalid music font metric key: ${key}`);\n }\n }\n val = val[parts[i]];\n }\n\n // console.log('found:', key, val);\n return val;\n }\n\n getFontData() {\n return this.fontData;\n }\n\n getGlyphs() {\n return this.fontData.glyphs;\n }\n\n getCodePoints() {\n return this.codePoints;\n }\n\n setCodePoints(codePoints) {\n this.codePoints = codePoints;\n return this;\n }\n}\n\nconst Fonts = {\n Bravura: new Font('Bravura', BravuraMetrics, BravuraFont),\n Gonville: new Font('Gonville', GonvilleMetrics, GonvilleFont),\n Petaluma: new Font('Petaluma', PetalumaMetrics, PetalumaFont),\n Custom: new Font('Custom', CustomMetrics, CustomFont),\n};\n\nconst DefaultFontStack = [Fonts.Bravura, Fonts.Gonville, Fonts.Custom];\n\nexport { Fonts, DefaultFontStack, Font };\n","export const BravuraMetrics = {\n name: 'Bravura',\n smufl: true,\n\n stave: {\n padding: 12,\n },\n\n clef: {\n default: {\n point: 32,\n width: 26,\n },\n small: {\n point: 26,\n width: 20,\n },\n\n annotations: {\n '8va': {\n smuflCode: 'timeSig8',\n default: {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n small: {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n }\n },\n '8vb': {\n smuflCode: 'timeSig8',\n default: {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n }\n },\n small: {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n }\n }\n }\n },\n\n // These may no longer be necessary\n lineCount: {\n '8': { point: 55, shiftY: 14 },\n '7': { point: 47, shiftY: 8 },\n '6': { point: 32, shiftY: 1 },\n '5': { point: 30, shiftY: -6 },\n '4': { point: 23, shiftY: -12 },\n }\n },\n\n pedalMarking: {\n up: {\n point: 40\n },\n down: {\n point: 34\n }\n },\n\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 34,\n\n // used by tuplets\n tupletPoint: 22,\n shiftY: -6,\n },\n\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n }\n },\n\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n }\n },\n\n stem: {\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n }\n }\n },\n\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n tabStem: {\n shiftX: -1.75,\n },\n staveTempo: {\n shiftX: -1,\n }\n },\n clef: {\n gClef: {\n default: { scale: 1.1, shiftY: 1 },\n small: { shiftY: 1.5 }\n },\n fClef: {\n default: { shiftY: -0.5 }\n }\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n },\n stroke: {\n arrowheadBlackDown: {\n straight: {\n shiftX: -4.5,\n },\n wiggly: {\n shiftX: -1,\n shiftY: 1,\n }\n },\n arrowheadBlackUp: {\n straight: {\n shiftX: -0.85,\n },\n wiggly: {\n shiftX: -1,\n shiftY: 1,\n }\n }\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -8,\n shiftY: 8,\n },\n ornamentTurn: {\n point: 42,\n },\n ornamentTurnSlash: {\n point: 42,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n }\n },\n noteHead: {\n standard: {\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n custom: {\n 'noteheadCircleXStemUp': {\n shiftX: 1.5,\n },\n 'noteheadCircleXStemDown': {\n shiftX: 0.25,\n },\n 'noteheadDiamondHalfStemUp': {\n shiftX: 1.5,\n },\n 'noteheadDiamondBlackStemUp': {\n shiftX: 1.5,\n },\n 'noteheadDiamondWholeStemUp': {\n shiftX: 1,\n },\n 'noteheadXHalfStemUp': {\n shiftX: -2,\n },\n 'noteheadXHalfStemDown': {\n shiftX: 1,\n },\n 'noteheadXWholeStemUp': {\n shiftX: -4,\n },\n 'noteheadXWholeStemDown': {\n shiftX: 1,\n },\n 'noteheadSquareWhiteStemDown': {\n shiftX: 0.25,\n },\n 'noteheadSquareWhiteStemUp': {\n shiftX: -0.75,\n },\n 'noteheadSquareBlackStemUp': {\n shiftX: -0.75,\n },\n 'noteheadTriangleUpWholeStemUp': {\n shiftX: -0.75,\n }\n },\n },\n }\n};\n","export const BravuraFont = {\n 'glyphs': {\n 'bracketTop': {\n 'x_min': 0,\n 'x_max': 469,\n 'y_min': 0,\n 'y_max': 295,\n 'ha': 295,\n 'o': 'm 0 168 l 0 0 l 180 0 b 674 390 410 43 616 150 b 675 405 675 396 675 400 b 664 425 675 416 671 422 b 628 405 651 425 635 415 b 157 179 613 389 432 199 l 12 179 b 0 168 3 179 0 177 z'\n },\n 'bracketBottom': {\n 'x_min': 0,\n 'x_max': 469,\n 'y_min': -295,\n 'y_max': 0,\n 'ha': 295,\n 'o': 'm 0 0 l 0 -168 b 12 -179 0 -177 3 -179 l 157 -179 b 628 -405 432 -199 613 -389 b 664 -425 635 -415 651 -425 b 675 -405 671 -422 675 -416 b 674 -390 675 -400 675 -396 b 180 0 616 -150 410 -43 z'\n },\n 'barlineTick': {\n 'x_min': 0,\n 'x_max': 36,\n 'y_min': 868,\n 'y_max': 1120,\n 'ha': 252,\n 'o': 'm 52 1250 l 52 1613 l 0 1613 l 0 1250 z'\n },\n 'breathMarkTick': {\n 'x_min': 0,\n 'x_max': 500,\n 'y_min': 0,\n 'y_max': 502,\n 'ha': 502,\n 'o': 'm 0 374 b 9 334 0 367 0 343 b 179 19 40 312 164 121 b 192 0 179 3 186 0 b 210 19 197 0 207 6 b 698 701 245 197 507 658 b 720 714 714 704 720 711 b 698 723 720 720 711 723 b 197 186 455 714 210 202 b 186 176 194 179 189 176 b 176 186 179 176 176 186 b 9 367 143 266 27 359 b 0 374 6 372 3 374 z'\n },\n 'segno': {\n 'x_min': 4,\n 'x_max': 550,\n 'y_min': -27,\n 'y_max': 759,\n 'ha': 786,\n 'o': 'm 29 687 b 295 449 75 582 284 454 b 304 438 301 446 304 444 b 295 415 304 432 301 425 b 78 22 285 395 78 22 b 73 3 75 16 73 9 b 114 -39 73 -20 91 -39 b 150 -17 128 -39 143 -30 b 377 395 150 -17 373 386 b 395 402 377 393 389 402 b 704 176 416 397 704 312 b 624 75 704 120 670 82 b 613 73 621 75 616 73 b 562 138 586 73 562 94 l 562 154 b 485 249 562 209 526 249 b 468 246 480 249 474 248 b 366 153 415 233 366 210 b 540 -12 366 65 455 -12 b 600 -1 559 -12 579 -9 b 792 251 716 37 792 131 b 789 292 792 264 791 278 b 523 588 768 451 540 579 b 498 611 505 598 498 603 b 501 619 498 613 500 616 b 732 1032 508 631 732 1032 b 737 1053 736 1040 737 1045 b 697 1093 737 1076 719 1093 b 661 1073 683 1093 668 1086 b 423 647 661 1073 432 660 b 410 635 419 639 416 635 b 396 639 406 635 402 636 b 128 792 383 644 166 727 b 108 868 120 808 108 838 b 186 958 108 907 125 948 l 194 958 b 217 939 203 958 213 955 l 220 929 b 325 805 230 890 252 805 b 425 901 384 805 425 840 b 413 969 425 923 420 946 b 220 1060 390 1035 294 1060 b 6 793 120 1060 6 936 b 29 687 6 759 13 723 z m 680 589 b 762 671 726 589 762 626 b 680 753 762 717 726 753 b 598 671 635 753 598 717 b 680 589 598 626 635 589 z m 120 298 b 202 380 166 298 202 334 b 120 462 202 425 166 462 b 37 380 75 462 37 425 b 120 298 37 334 75 298 z'\n },\n 'coda': {\n 'x_min': -4,\n 'x_max': 955,\n 'y_min': -158,\n 'y_max': 898,\n 'ha': 1056,\n 'o': 'm -6 541 b 20 507 -6 523 0 507 l 210 507 b 660 0 226 238 426 19 l 660 -202 b 694 -228 660 -222 675 -228 b 729 -202 713 -228 729 -222 l 729 0 b 1178 507 962 19 1164 238 l 1349 507 b 1375 541 1369 507 1375 523 b 1349 576 1375 560 1369 576 l 1178 576 b 729 1083 1164 847 962 1064 l 729 1269 b 694 1293 729 1287 713 1293 b 660 1269 675 1293 660 1287 l 660 1083 b 210 576 426 1064 226 848 l 20 576 b -6 541 0 576 -6 560 z m 940 576 l 729 576 l 729 1002 b 940 576 930 985 940 809 z m 729 507 l 940 507 b 729 69 936 287 909 91 z m 455 576 b 660 1002 455 809 455 985 l 660 576 z m 660 507 l 660 69 b 455 507 474 91 456 285 z'\n },\n 'gClef': {\n 'x_min': 0,\n 'x_max': 671,\n 'y_min': -658,\n 'y_max': 1098,\n 'ha': 1756,\n 'o': 'm 524 -363 b 624 -354 557 -363 595 -360 b 645 -367 639 -351 642 -350 b 684 -657 662 -464 684 -589 b 455 -896 684 -870 540 -896 b 340 -854 377 -896 340 -873 b 386 -829 340 -844 353 -840 b 482 -694 431 -816 482 -778 b 344 -547 482 -615 432 -547 b 190 -713 248 -547 190 -624 b 464 -948 190 -806 246 -948 b 747 -660 560 -948 747 -904 b 706 -351 747 -577 721 -441 b 724 -327 703 -334 704 -336 b 966 16 870 -269 966 -147 b 619 363 966 200 831 363 b 577 389 582 363 582 363 l 541 598 b 550 625 539 615 541 616 b 824 1174 706 770 824 953 b 730 1509 824 1299 789 1423 b 655 1581 708 1541 671 1581 b 562 1512 635 1581 590 1544 b 420 1064 455 1394 420 1214 b 441 828 420 981 431 887 b 428 793 444 811 445 808 b 0 125 220 622 0 416 b 524 -363 0 -125 171 -363 z m 115 29 b 249 363 115 114 130 228 b 469 567 336 459 402 513 b 490 562 484 579 487 577 l 520 377 b 498 343 524 350 524 351 b 289 63 372 300 289 186 b 455 -192 289 -66 357 -158 b 494 -200 467 -196 484 -200 b 511 -184 505 -200 511 -193 b 490 -166 511 -174 500 -170 b 386 -12 429 -140 386 -78 b 530 157 386 71 442 132 b 559 145 553 163 556 161 l 631 -284 b 611 -304 634 -300 632 -300 b 530 -311 588 -308 559 -311 b 115 29 278 -311 115 -171 z m 677 1358 b 763 1240 724 1358 763 1319 b 513 851 763 1080 626 950 b 494 863 503 842 497 844 b 485 995 488 900 485 949 b 677 1358 485 1220 589 1358 z m 635 168 b 848 -66 752 158 848 60 b 713 -271 848 -157 793 -230 b 690 -262 696 -279 693 -279 l 619 148 b 635 168 616 166 618 170 z'\n },\n 'cClef': {\n 'x_min': 0,\n 'x_max': 699,\n 'y_min': -506,\n 'y_max': 506,\n 'ha': 1012,\n 'o': 'm 269 -694 b 300 -724 269 -714 279 -724 l 301 -724 b 331 -694 321 -724 331 -714 l 331 -63 b 344 -55 331 -52 338 -53 b 472 -265 382 -65 442 -102 b 500 -301 477 -288 485 -301 b 530 -262 516 -301 523 -287 b 684 -128 549 -199 582 -128 b 804 -409 778 -128 804 -220 b 651 -683 804 -598 770 -683 b 528 -644 631 -683 528 -674 b 567 -622 528 -636 552 -628 b 625 -528 596 -612 625 -583 b 527 -429 625 -465 583 -429 b 416 -547 465 -429 416 -471 b 667 -729 416 -638 495 -729 b 1007 -413 903 -729 1007 -563 b 706 -76 1007 -215 897 -76 b 618 -89 664 -76 636 -84 b 576 -88 603 -94 589 -96 b 524 0 556 -75 524 -29 b 576 88 524 29 556 75 b 618 89 589 96 603 94 b 706 76 636 84 664 76 b 1007 413 897 76 1007 215 b 667 729 1007 563 903 729 b 416 547 495 729 416 638 b 527 429 416 471 465 429 b 625 528 583 429 625 465 b 567 622 625 583 596 612 b 528 644 552 628 528 636 b 651 683 528 674 631 683 b 804 409 770 683 804 598 b 684 128 804 220 778 128 b 530 262 582 128 549 199 b 500 301 523 287 516 301 b 472 265 485 301 477 288 b 344 55 442 102 382 65 b 331 63 338 53 331 52 l 331 694 b 301 724 331 714 321 724 l 300 724 b 269 694 279 724 269 714 z m 30 -724 l 154 -724 b 184 -694 174 -724 184 -714 l 184 694 b 154 724 184 714 174 724 l 30 724 b 0 694 10 724 0 714 l 0 -694 b 30 -724 0 -714 10 -724 z'\n },\n 'fClef': {\n 'x_min': -5,\n 'x_max': 684,\n 'y_min': -635,\n 'y_max': 262,\n 'ha': 897,\n 'o': 'm 12 -914 b 36 -907 19 -914 27 -912 b 765 -40 390 -734 765 -478 b 363 377 765 210 612 377 b 0 56 112 377 0 194 b 177 -158 0 -59 60 -158 b 330 -6 268 -158 330 -95 b 192 144 330 86 262 144 b 120 134 153 144 138 134 b 96 160 101 134 96 145 b 330 323 96 217 183 323 b 549 -53 482 323 549 173 b 14 -871 549 -455 350 -680 b -7 -897 1 -878 -7 -886 b 12 -914 -7 -906 -1 -914 z m 906 101 b 985 180 950 101 985 135 b 906 259 985 225 950 259 b 827 180 861 259 827 225 b 906 101 827 135 861 101 z m 907 -258 b 985 -180 952 -258 985 -225 b 907 -102 985 -135 952 -102 b 829 -180 863 -102 829 -135 b 907 -258 829 -225 863 -258 z'\n },\n 'unpitchedPercussionClef1': {\n 'x_min': 0,\n 'x_max': 382,\n 'y_min': -250,\n 'y_max': 250,\n 'ha': 500,\n 'o': 'm 320 338 l 320 -338 b 340 -360 320 -350 328 -360 l 530 -360 b 550 -338 541 -360 550 -350 l 550 338 b 530 360 550 350 541 360 l 340 360 b 320 338 328 360 320 350 z m 20 -360 l 210 -360 b 230 -338 222 -360 230 -350 l 230 338 b 210 360 230 350 222 360 l 20 360 b 0 338 9 360 0 350 l 0 -338 b 20 -360 0 -350 9 -360 z'\n },\n '6stringTabClef': {\n 'x_min': -3,\n 'x_max': 408,\n 'y_min': -748,\n 'y_max': 764,\n 'ha': 1512,\n 'o': 'm 39 -399 l 39 -1077 l 344 -1077 b 544 -883 467 -1077 544 -995 b 420 -719 544 -802 507 -752 b 514 -572 482 -690 514 -639 b 314 -399 514 -472 442 -399 z m 88 -328 l 160 -125 l 420 -125 l 491 -328 l 588 -328 l 350 348 l 238 348 l -4 -328 z m 26 1100 l 26 1024 l 249 1024 l 249 422 l 336 422 l 336 1024 l 557 1024 l 557 1100 z m 125 -768 l 337 -768 b 458 -884 418 -768 458 -818 b 337 -1001 458 -949 418 -1001 l 125 -1001 z m 292 -475 b 428 -583 389 -475 428 -514 b 292 -691 428 -652 389 -691 l 125 -691 l 125 -475 z m 292 256 l 397 -52 l 181 -52 z'\n },\n 'timeSig0': {\n 'x_min': 20,\n 'x_max': 450,\n 'y_min': -250,\n 'y_max': 251,\n 'ha': 501,\n 'o': 'm 338 -360 b 648 0 510 -360 648 -199 b 338 361 648 200 510 361 b 29 0 167 361 29 200 b 338 -360 29 -199 167 -360 z m 230 10 b 338 317 230 180 278 317 b 446 10 397 317 446 180 b 338 -295 446 -158 397 -295 b 230 10 278 -295 230 -158 z'\n },\n 'timeSig1': {\n 'x_min': 20,\n 'x_max': 314,\n 'y_min': -250,\n 'y_max': 251,\n 'ha': 501,\n 'o': 'm 29 0 b 45 -20 29 -7 33 -16 b 58 -23 50 -22 56 -23 b 78 -10 72 -23 78 -10 b 156 117 78 -10 140 89 b 170 131 161 127 167 131 b 179 111 176 131 179 120 l 179 -261 b 115 -315 179 -294 145 -315 b 91 -337 105 -315 91 -320 b 122 -360 91 -353 104 -360 l 429 -360 b 452 -337 452 -360 452 -337 b 431 -315 452 -337 452 -315 b 384 -265 410 -315 384 -289 l 384 328 b 356 361 384 351 376 360 b 281 356 336 361 300 356 b 206 360 253 356 228 357 b 199 361 203 360 200 361 b 173 334 184 361 179 347 l 35 19 b 29 0 35 19 29 10 z'\n },\n 'timeSig2': {\n 'x_min': 20,\n 'x_max': 426,\n 'y_min': -257,\n 'y_max': 254,\n 'ha': 511,\n 'o': 'm 29 170 b 42 108 29 150 33 130 b 160 29 63 63 108 29 b 261 156 248 29 261 120 b 161 275 261 242 161 246 b 275 330 164 295 190 330 b 405 192 403 330 405 233 b 193 -102 405 60 297 -39 b 33 -314 114 -153 58 -223 b 69 -370 33 -336 40 -370 b 203 -282 101 -370 118 -282 b 410 -360 261 -282 282 -360 b 606 -131 472 -360 583 -354 b 589 -111 606 -114 599 -111 b 570 -125 577 -111 573 -117 b 569 -130 570 -127 569 -128 b 513 -192 554 -164 543 -192 b 488 -187 505 -192 498 -190 b 445 -171 469 -180 459 -179 b 289 -137 416 -160 348 -137 b 236 -145 271 -137 252 -140 b 422 -42 268 -94 390 -50 b 613 147 523 -14 613 27 b 330 366 613 300 464 366 b 69 275 229 366 140 357 b 29 170 45 245 29 209 z'\n },\n 'timeSig3': {\n 'x_min': 20,\n 'x_max': 401,\n 'y_min': -251,\n 'y_max': 249,\n 'ha': 500,\n 'o': 'm 29 -203 b 275 -361 32 -315 134 -359 l 288 -361 b 577 -161 431 -361 577 -288 l 577 -151 b 537 -50 575 -109 564 -82 b 503 -20 528 -39 517 -29 l 472 -3 l 425 10 b 410 17 418 12 413 12 b 409 24 409 20 409 22 b 415 37 409 30 410 36 b 459 50 431 42 446 43 b 547 181 517 78 547 115 b 307 357 547 314 367 353 b 285 359 300 357 292 359 b 37 200 161 359 37 276 b 154 84 37 153 65 89 l 161 84 b 256 177 225 84 256 130 l 256 189 b 209 248 252 242 216 245 b 180 268 202 251 180 248 l 180 274 b 240 310 183 298 228 310 b 374 199 363 310 374 233 l 374 189 b 199 36 374 82 289 40 b 164 12 184 35 164 27 b 200 -6 164 -6 189 -6 b 379 -137 366 -6 379 -118 b 269 -307 379 -289 301 -307 b 256 -305 264 -307 258 -305 b 216 -282 245 -304 217 -304 l 216 -275 b 249 -180 216 -243 248 -222 b 145 -76 249 -120 207 -76 b 130 -78 140 -76 135 -76 b 60 -115 105 -82 78 -96 b 29 -203 36 -137 29 -171 z'\n },\n 'timeSig4': {\n 'x_min': 20,\n 'x_max': 450,\n 'y_min': -250,\n 'y_max': 251,\n 'ha': 501,\n 'o': 'm 58 -161 l 325 -161 l 325 -252 b 268 -302 325 -291 294 -302 b 235 -330 245 -302 235 -315 b 262 -360 235 -344 240 -360 l 569 -360 b 598 -330 583 -360 598 -350 b 566 -301 598 -310 580 -301 b 521 -246 552 -301 521 -292 l 521 -161 l 626 -161 b 648 -134 641 -161 648 -151 b 626 -107 648 -117 642 -107 l 521 -107 l 521 202 b 504 226 521 213 520 226 b 475 213 491 226 484 223 l 338 48 b 325 14 333 40 325 32 l 325 -107 l 131 -107 b 481 334 246 -9 477 318 b 482 341 481 337 482 338 b 461 361 482 353 472 361 b 363 359 448 361 389 359 b 261 361 337 359 272 361 b 228 334 248 361 228 357 b 43 -105 228 156 86 -45 l 35 -117 b 33 -121 35 -118 33 -120 b 29 -137 30 -127 29 -132 b 58 -161 29 -151 40 -161 z'\n },\n 'timeSig5': {\n 'x_min': 20,\n 'x_max': 383,\n 'y_min': -251,\n 'y_max': 246,\n 'ha': 497,\n 'o': 'm 29 -183 b 284 -361 29 -302 107 -361 b 552 -125 456 -361 552 -255 b 314 112 552 6 445 112 b 122 71 230 112 168 98 b 115 69 120 69 117 69 b 109 79 109 69 109 75 l 109 85 b 117 179 109 85 115 166 b 138 197 118 190 125 197 l 144 197 b 285 184 158 194 226 184 b 492 323 485 184 492 300 b 472 353 492 341 488 353 b 295 340 454 353 341 340 b 101 354 249 340 125 351 b 66 330 75 354 68 341 l 50 10 l 50 7 b 79 -14 50 -12 65 -14 b 111 14 94 -14 95 -1 b 209 62 125 29 160 62 b 357 -125 258 62 357 35 b 235 -304 357 -284 272 -304 b 202 -300 223 -304 212 -304 b 184 -279 194 -295 186 -289 b 202 -259 184 -269 194 -264 b 256 -163 235 -239 256 -203 b 144 -50 256 -99 206 -50 b 30 -157 66 -50 35 -107 b 29 -183 29 -166 29 -174 z'\n },\n 'timeSig6': {\n 'x_min': 20,\n 'x_max': 414,\n 'y_min': -249,\n 'y_max': 251,\n 'ha': 500,\n 'o': 'm 29 4 l 29 -1 b 73 -200 30 -68 42 -143 b 324 -359 132 -307 203 -359 b 513 -307 389 -359 461 -348 b 596 -137 563 -266 596 -202 b 379 72 596 -24 490 72 b 248 22 333 72 285 55 b 239 19 245 19 242 19 b 226 53 230 19 226 30 b 346 327 230 320 315 327 b 393 305 374 327 393 320 b 357 251 393 285 366 268 b 347 209 350 238 347 223 b 369 150 347 187 354 166 b 439 120 379 131 420 120 b 554 229 500 120 554 167 b 553 245 554 235 554 239 b 348 361 539 337 426 361 b 85 209 239 360 137 307 b 29 4 53 148 29 72 z m 320 3 b 405 -158 366 3 405 -69 b 320 -320 405 -248 366 -320 b 236 -158 274 -320 236 -248 b 320 3 236 -69 274 3 z'\n },\n 'timeSig7': {\n 'x_min': 20,\n 'x_max': 421,\n 'y_min': -250,\n 'y_max': 249,\n 'ha': 499,\n 'o': 'm 29 71 b 45 48 29 71 30 48 b 66 76 56 48 60 60 b 164 196 81 112 99 196 b 374 88 222 196 291 88 b 446 118 415 88 435 109 b 459 124 451 121 456 124 b 469 111 465 124 468 120 b 272 -112 469 71 359 -10 b 173 -315 217 -176 173 -259 b 200 -360 173 -346 173 -360 b 294 -347 226 -360 258 -347 b 412 -360 330 -347 397 -360 b 435 -307 426 -360 435 -348 b 606 288 435 -66 606 140 l 606 294 b 582 351 606 333 606 351 b 552 336 580 351 557 346 b 485 236 541 318 521 236 b 262 359 449 236 382 359 b 137 307 179 359 157 325 b 98 281 117 288 108 282 b 60 315 86 281 68 301 b 43 325 58 321 50 325 b 29 308 36 325 29 321 z'\n },\n 'timeSig8': {\n 'x_min': 20,\n 'x_max': 416,\n 'y_min': -259,\n 'y_max': 259,\n 'ha': 518,\n 'o': 'm 29 -190 b 301 -373 29 -315 158 -373 b 599 -117 445 -373 599 -311 b 481 52 599 -30 549 17 b 567 204 533 85 567 132 b 317 373 567 351 356 373 b 36 176 150 373 36 297 b 161 -16 36 76 92 23 b 29 -190 86 -52 29 -99 z m 111 -183 b 225 -48 111 -125 161 -72 b 436 -219 330 -94 436 -124 b 295 -325 436 -276 392 -325 b 111 -183 199 -325 111 -276 z m 314 331 b 482 207 360 331 482 308 b 406 85 482 150 454 112 b 168 240 291 125 168 150 b 314 331 168 301 251 331 z'\n },\n 'timeSig9': {\n 'x_min': 20,\n 'x_max': 414,\n 'y_min': -249,\n 'y_max': 251,\n 'ha': 500,\n 'o': 'm 246 -69 b 377 -19 292 -69 340 -52 b 386 -16 380 -16 383 -16 b 399 -50 395 -16 399 -27 b 279 -324 395 -317 310 -324 b 232 -302 251 -324 232 -317 b 268 -248 232 -282 259 -265 b 278 -206 275 -235 278 -220 b 256 -147 278 -184 271 -163 b 186 -117 246 -128 204 -117 b 71 -226 125 -117 71 -164 b 72 -242 71 -232 71 -236 b 276 -359 86 -334 199 -359 b 540 -206 386 -357 488 -304 b 596 -1 572 -145 596 -69 l 596 4 b 552 203 595 71 583 145 b 301 361 492 310 422 361 b 112 310 236 361 164 351 b 29 140 62 269 29 204 b 246 -69 29 27 135 -69 z m 220 161 b 305 323 220 251 259 323 b 389 161 351 323 389 251 b 305 0 389 72 351 0 b 220 161 259 0 220 72 z'\n },\n 'timeSigCommon': {\n 'x_min': 5,\n 'x_max': 424,\n 'y_min': -249,\n 'y_max': 251,\n 'ha': 500,\n 'o': 'm 101 -262 b 321 -359 156 -328 235 -359 b 611 -88 573 -359 611 -130 b 589 -56 611 -56 595 -56 b 567 -82 577 -56 567 -58 b 363 -311 567 -268 409 -311 b 184 40 246 -311 184 -197 b 372 327 184 278 294 327 b 477 278 446 327 477 292 b 451 246 477 265 472 246 b 360 140 393 246 360 184 b 471 32 360 58 431 32 b 580 156 471 32 580 36 b 336 361 580 344 363 361 b 7 -14 131 361 7 180 b 101 -262 7 -108 42 -190 z'\n },\n 'timeSigCutCommon': {\n 'x_min': 0,\n 'x_max': 418,\n 'y_min': -359,\n 'y_max': 361,\n 'ha': 720,\n 'o': 'm 225 -346 b 252 -382 235 -350 252 -369 l 252 -492 b 276 -517 252 -505 265 -517 b 302 -492 292 -517 302 -505 l 302 -379 b 318 -359 302 -370 308 -363 b 602 -85 563 -354 602 -130 b 579 -58 600 -58 586 -58 l 573 -58 b 559 -82 567 -58 559 -60 b 354 -310 559 -266 400 -310 b 317 -305 340 -310 328 -308 b 302 -284 311 -304 302 -295 l 302 287 b 338 323 302 297 328 321 b 363 324 347 324 356 324 b 468 275 436 324 468 289 b 442 243 468 264 464 243 b 351 137 384 243 351 181 b 462 30 351 56 422 30 b 572 154 462 30 572 35 b 318 357 572 295 441 357 b 302 390 310 359 302 383 l 302 495 b 276 520 302 507 292 520 b 252 495 265 520 252 507 l 252 369 b 235 346 252 359 238 346 l 196 331 b 0 -14 66 275 0 122 b 225 -346 0 -150 86 -310 z m 232 259 b 236 262 233 262 235 262 b 252 239 243 262 252 251 l 252 -235 b 243 -252 252 -248 248 -252 b 236 -248 240 -252 238 -251 b 177 37 197 -193 177 -96 b 232 259 177 147 200 215 z'\n },\n 'noteheadDoubleWhole': {\n 'x_min': 0,\n 'x_max': 599,\n 'y_min': -155,\n 'y_max': 155,\n 'ha': 310,\n 'o': 'm 423 -180 b 733 1 657 -180 733 -98 l 733 -213 b 747 -223 733 -219 740 -223 l 766 -223 b 780 -213 773 -223 780 -219 l 780 212 b 766 223 780 217 773 223 l 747 223 b 733 212 740 223 733 217 l 733 1 b 438 180 733 104 572 180 b 130 1 248 180 130 101 b 423 -180 130 -92 210 -180 z m 284 58 b 400 147 284 131 333 147 b 577 -45 498 147 577 42 b 469 -145 577 -115 533 -145 b 331 -71 409 -145 369 -112 b 284 58 305 -37 284 12 z m 815 -213 b 829 -223 815 -219 824 -223 l 848 -223 b 863 -213 857 -223 863 -219 l 863 212 b 848 223 863 217 857 223 l 829 223 b 815 212 824 223 815 217 z m 82 212 l 82 -213 b 96 -223 82 -219 88 -223 l 114 -223 b 128 -213 121 -223 128 -219 l 128 212 b 114 223 128 217 121 223 l 96 223 b 82 212 88 223 82 217 z m 13 -223 l 32 -223 b 45 -213 39 -223 45 -219 l 45 212 b 32 223 45 217 39 223 l 13 223 b 0 212 4 223 0 217 l 0 -213 b 13 -223 0 -219 4 -223 z'\n },\n 'noteheadWhole': {\n 'x_min': 0,\n 'x_max': 422,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 0 3 b 297 -180 0 -94 82 -180 b 608 3 533 -180 608 -98 b 311 180 608 105 445 180 b 0 3 120 180 0 101 z m 156 56 b 160 91 156 68 157 79 b 274 148 176 141 229 148 b 452 -45 373 148 452 42 b 386 -141 452 -89 433 -130 b 341 -147 372 -145 356 -147 b 206 -72 289 -147 236 -112 b 156 56 177 -39 156 10 z'\n },\n 'noteheadHalf': {\n 'x_min': 0,\n 'x_max': 295,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 140 -180 b 425 60 377 -180 425 13 b 282 180 425 134 366 180 b 0 -60 68 180 0 14 b 140 -180 0 -137 60 -180 z m 42 -63 b 318 121 42 7 251 121 b 372 91 346 121 361 108 b 380 63 376 82 380 73 b 108 -125 380 1 177 -125 b 50 -92 78 -125 60 -109 b 42 -63 46 -84 42 -73 z'\n },\n 'noteheadBlack': {\n 'x_min': 0,\n 'x_max': 295,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 0 -60 b 140 -180 0 -135 62 -180 b 425 60 268 -180 425 -62 b 285 180 425 134 367 180 b 0 -60 127 180 0 63 z'\n },\n 'noteheadXWhole': {\n 'x_min': 0,\n 'x_max': 377,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 0 148 b 12 124 0 140 4 131 l 132 0 l 12 -124 b 1 -148 4 -131 1 -140 b 32 -180 1 -164 14 -180 l 158 -180 b 179 -171 166 -180 173 -177 l 272 -95 l 364 -171 b 384 -180 370 -177 377 -180 l 511 -180 b 543 -148 528 -180 543 -164 b 531 -124 543 -140 539 -131 l 412 0 l 531 124 b 541 148 539 131 541 140 b 513 180 541 164 528 180 l 384 180 b 364 171 377 180 370 177 l 272 94 l 179 171 b 158 180 173 177 166 180 l 30 180 b 0 148 16 180 0 164 z m 245 0 l 88 141 l 157 141 l 272 45 l 386 141 l 456 141 l 300 0 l 456 -141 l 386 -141 l 272 -45 l 157 -141 l 88 -141 z'\n },\n 'noteheadXHalf': {\n 'x_min': 0,\n 'x_max': 334,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 32 -180 l 184 -180 b 209 -170 193 -180 203 -177 l 271 -99 l 363 -171 b 384 -180 370 -176 377 -180 l 445 -180 b 478 -147 461 -180 478 -163 b 465 -125 478 -138 474 -131 l 341 -22 l 474 127 b 481 148 480 131 481 138 b 448 180 481 166 468 180 l 295 180 b 271 170 287 180 278 177 l 209 98 l 115 171 b 95 180 109 177 104 180 l 36 180 b 4 148 19 180 4 164 b 14 124 4 140 7 132 l 140 22 l 7 -127 b 0 -148 3 -131 0 -138 b 32 -180 0 -166 14 -180 z m 95 148 l 233 33 l 334 148 l 410 148 l 274 -6 l 445 -148 l 384 -148 l 248 -35 l 147 -148 l 71 -148 l 206 4 l 36 148 z'\n },\n 'noteheadXBlack': {\n 'x_min': 0,\n 'x_max': 290,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 0 -158 b 19 -180 0 -170 7 -180 b 29 -176 23 -180 26 -179 l 207 -24 l 389 -176 b 399 -180 392 -179 396 -180 b 418 -160 410 -180 418 -168 b 410 -143 418 -153 415 -147 l 239 0 l 410 144 b 418 160 415 147 418 154 b 399 180 418 171 408 180 b 389 177 396 180 392 179 l 207 26 l 29 177 b 17 180 26 179 22 180 b 0 161 7 180 0 170 b 7 144 0 156 3 148 l 179 0 l 7 -143 b 0 -158 1 -147 0 -153 z'\n },\n 'noteheadCircleX': {\n 'x_min': 0,\n 'x_max': 249,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 0 0 b 179 -180 0 -99 81 -180 b 359 0 278 -180 359 -99 b 179 180 359 99 278 180 b 0 0 81 180 0 99 z m 69 84 l 151 1 l 68 -84 b 40 0 49 -60 40 -30 b 69 84 40 32 50 60 z m 180 -27 l 262 -111 b 179 -138 239 -128 210 -138 b 95 -111 148 -138 120 -128 z m 209 1 l 291 84 b 317 0 307 60 317 30 b 292 -82 317 -30 308 -59 z m 179 138 b 261 112 210 138 238 128 l 180 30 l 98 112 b 179 138 121 128 148 138 z'\n },\n 'noteheadTriangleUpWhole': {\n 'x_min': 0,\n 'x_max': 319,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 0 -166 b 14 -180 0 -173 6 -180 l 445 -180 b 459 -166 454 -180 459 -173 b 458 -158 459 -163 458 -160 l 239 173 b 228 180 238 177 233 180 b 216 173 225 180 219 177 l 1 -158 b 0 -166 1 -160 0 -163 z m 145 -96 b 228 108 145 -17 197 56 b 310 -98 259 55 310 -17 b 288 -137 310 -111 301 -137 l 170 -137 b 145 -96 157 -137 145 -109 z'\n },\n 'noteheadTriangleUpHalf': {\n 'x_min': 0,\n 'x_max': 285,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 14 -180 l 396 -180 b 410 -166 406 -180 410 -173 b 409 -158 410 -163 410 -161 l 228 173 b 215 180 226 174 220 180 b 202 173 210 180 204 177 l 3 -157 b 0 -166 1 -160 0 -163 b 14 -180 0 -173 7 -180 z m 115 -138 l 232 76 l 297 -37 l 246 -138 z'\n },\n 'noteheadTriangleUpBlack': {\n 'x_min': 0,\n 'x_max': 293,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 422 -180 l 207 180 l 0 -180 z'\n },\n 'noteheadDiamondWhole': {\n 'x_min': 0,\n 'x_max': 270,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 4 7 l 258 -179 b 264 -180 261 -179 262 -180 b 272 -176 268 -180 271 -179 l 386 -23 b 389 -16 387 -20 389 -19 b 383 -7 389 -13 386 -9 l 130 179 b 122 180 128 180 125 180 b 115 177 120 180 117 180 l 3 23 b 0 17 1 20 0 19 b 4 7 0 16 3 10 z m 109 111 b 112 112 109 112 111 112 b 118 111 115 112 117 111 l 320 -37 b 324 -46 323 -39 324 -42 b 275 -111 278 -111 276 -111 b 268 -108 272 -111 271 -109 l 66 40 b 62 48 65 42 62 45 z'\n },\n 'noteheadDiamondHalf': {\n 'x_min': 0,\n 'x_max': 251,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 4 -7 l 174 -177 b 180 -180 176 -180 179 -180 b 189 -177 183 -180 186 -180 l 359 -7 b 361 0 360 -6 361 -3 b 359 7 361 3 360 4 l 189 177 b 180 180 186 179 183 180 b 174 177 179 180 176 179 l 4 7 b 0 0 1 4 0 3 b 4 -7 0 -3 1 -6 z m 215 73 b 266 26 238 73 266 50 b 138 -71 266 -12 176 -71 b 96 -50 121 -71 108 -63 b 88 -24 89 -43 88 -32 b 215 73 88 13 177 73 z'\n },\n 'noteheadDiamondBlack': {\n 'x_min': 0,\n 'x_max': 250,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 4 -7 l 173 -177 b 180 -180 176 -180 177 -180 b 187 -177 181 -180 184 -180 l 357 -6 b 360 1 359 -4 360 -1 b 357 9 360 4 359 7 l 189 177 b 180 180 187 179 184 180 b 171 177 177 180 173 179 l 3 9 b 0 1 0 6 0 4 b 4 -7 0 -1 1 -4 z'\n },\n 'noteheadSquareWhite': {\n 'x_min': 0,\n 'x_max': 313,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 451 -180 l 451 180 l 0 180 l 0 -180 z m 40 -138 l 40 140 l 410 140 l 410 -138 z'\n },\n 'noteheadSquareBlack': {\n 'x_min': 0,\n 'x_max': 313,\n 'y_min': -125,\n 'y_max': 125,\n 'ha': 250,\n 'o': 'm 451 -180 l 451 180 l 0 180 l 0 -180 z'\n },\n 'augmentationDot': {\n 'x_min': 0,\n 'x_max': 100,\n 'y_min': -50,\n 'y_max': 50,\n 'ha': 100,\n 'o': 'm 72 -72 b 144 0 112 -72 144 -40 b 72 72 144 40 112 72 b 0 0 32 72 0 40 b 72 -72 0 -40 32 -72 z'\n },\n 'tremolo1': {\n 'x_min': -150,\n 'x_max': 150,\n 'y_min': -93,\n 'y_max': 94,\n 'ha': 187,\n 'o': 'm 216 -45 l 216 135 l -216 46 l -216 -134 z'\n },\n 'flag8thUp': {\n 'x_min': 0,\n 'x_max': 264,\n 'y_min': -810.1921176545985,\n 'y_max': 9,\n 'ha': 819.1921176545985,\n 'o': 'm 284 -688 b 318 -904 305 -737 318 -819 b 284 -1102 318 -969 308 -1037 b 279 -1123 281 -1110 279 -1117 b 302 -1165 279 -1146 294 -1159 b 343 -1138 311 -1171 336 -1162 b 380 -888 343 -1138 380 -1001 b 215 -395 380 -708 305 -539 b 58 -19 141 -281 81 -157 b 14 13 53 4 42 13 b 0 -9 6 13 0 9 l 0 -353 b 284 -688 95 -370 232 -566 z'\n },\n 'flag8thDown': {\n 'x_min': 0,\n 'x_max': 306,\n 'y_min': -14,\n 'y_max': 808,\n 'ha': 822,\n 'o': 'm 16 -20 b 58 12 43 -20 55 -12 b 262 387 82 148 189 274 b 441 881 353 530 441 701 b 400 1142 441 994 412 1096 b 377 1164 396 1158 387 1164 b 346 1094 356 1164 331 1136 b 376 897 366 1034 376 962 b 318 642 376 812 340 691 b 0 340 265 521 193 405 l 0 1 b 16 -20 0 -16 7 -20 z'\n },\n 'flag16thUp': {\n 'x_min': 0,\n 'x_max': 279,\n 'y_min': -813,\n 'y_max': 2,\n 'ha': 815,\n 'o': 'm 7 -570 b 298 -778 96 -573 199 -576 b 344 -992 331 -847 344 -917 b 333 -1120 344 -1034 340 -1077 b 331 -1133 331 -1126 331 -1129 b 363 -1171 331 -1152 343 -1171 b 392 -1146 373 -1171 383 -1165 b 402 -988 397 -1139 402 -1057 l 402 -956 b 360 -783 402 -896 386 -837 b 359 -770 360 -779 359 -776 b 360 -760 359 -768 359 -765 b 396 -577 364 -752 396 -665 b 392 -526 396 -559 395 -543 b 236 -275 377 -428 340 -387 b 53 -16 158 -192 78 -168 b 24 3 50 0 33 3 b 0 1 16 3 0 1 l 0 -570 z m 78 -312 l 89 -312 b 302 -464 177 -312 255 -393 b 341 -592 328 -501 341 -546 b 340 -621 341 -602 341 -611 b 330 -658 337 -632 337 -647 b 311 -667 328 -662 318 -667 b 301 -661 307 -667 304 -665 b 223 -562 278 -625 253 -596 b 59 -331 156 -484 89 -449 b 58 -327 58 -330 58 -328 b 78 -312 58 -321 66 -312 z'\n },\n 'flag16thDown': {\n 'x_min': 0,\n 'x_max': 290.8951581511223,\n 'y_min': -9,\n 'y_max': 812.0064,\n 'ha': 821.0064,\n 'o': 'm 0 -12 b 24 -13 0 -12 16 -13 b 53 6 33 -13 50 -10 b 406 516 88 228 372 289 b 410 567 409 531 410 549 b 374 750 410 655 379 742 b 373 760 373 753 373 756 b 374 773 373 766 374 769 b 405 1138 426 881 428 1022 b 370 1169 397 1171 387 1169 b 346 1132 353 1168 341 1156 b 312 768 367 1011 367 880 b 7 559 213 566 96 562 l 0 559 z m 58 317 b 59 321 58 318 58 320 b 238 552 89 439 170 472 b 315 651 268 585 292 613 b 325 657 318 655 321 657 b 344 647 333 657 343 652 b 354 611 351 636 351 622 b 356 582 356 600 356 590 b 317 454 356 534 343 491 b 89 302 269 383 177 302 l 78 302 b 58 317 66 302 58 310 z'\n },\n 'flag32ndUp': {\n 'x_min': 0,\n 'x_max': 261,\n 'y_min': -812,\n 'y_max': 149,\n 'ha': 961,\n 'o': 'm 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 366 -289 369 -315 369 -302 b 220 -58 350 -202 317 -163 b 46 187 148 20 71 43 b 17 215 45 200 26 215 b 0 197 9 215 0 197 l 0 -609 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 55 -386 b 73 -367 55 -384 65 -369 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 z'\n },\n 'flag32ndDown': {\n 'x_min': 0,\n 'x_max': 273,\n 'y_min': -172,\n 'y_max': 812,\n 'ha': 984,\n 'o': 'm 17 -248 b 48 -219 27 -248 46 -232 b 229 36 72 -69 154 -46 b 380 278 330 145 364 186 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 351 793 356 785 351 789 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 l 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -229 b 17 -248 0 -229 9 -248 z m 56 76 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 z m 56 386 b 217 609 86 501 153 533 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 z'\n },\n 'flag64thUp': {\n 'x_min': 0,\n 'x_max': 261,\n 'y_min': -812,\n 'y_max': 347,\n 'ha': 1159,\n 'o': 'm 0 -609 l 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 220 228 350 84 317 122 b 46 472 148 305 71 328 b 17 500 45 485 26 500 b 0 482 9 500 0 482 z m 56 193 b 300 24 138 193 220 157 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 58 187 148 20 82 43 b 56 193 58 189 58 192 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 55 -386 b 73 -367 55 -384 65 -369 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 z'\n },\n 'flag64thDown': {\n 'x_min': 0,\n 'x_max': 273,\n 'y_min': -376,\n 'y_max': 812,\n 'ha': 1188,\n 'o': 'm 17 -541 b 48 -513 27 -541 46 -526 b 229 -258 72 -363 154 -340 b 380 -16 330 -148 364 -108 b 384 27 383 -1 384 13 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 351 793 356 785 351 789 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 l 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -523 b 17 -541 0 -523 9 -541 z m 56 76 b 229 331 81 226 154 249 b 310 423 264 369 289 397 b 330 350 318 396 325 366 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 z m 229 36 b 311 128 264 73 289 102 l 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 b 229 36 75 -86 145 -55 z m 217 609 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 b 217 609 86 501 153 533 z'\n },\n 'flag128thUp': {\n 'x_min': 0,\n 'x_max': 261,\n 'y_min': -812,\n 'y_max': 533,\n 'ha': 1345,\n 'o': 'm 7 -609 b 278 -802 91 -612 186 -615 b 323 -999 310 -865 323 -930 b 311 -1122 323 -1040 318 -1080 b 310 -1132 311 -1126 310 -1129 b 328 -1166 310 -1149 318 -1162 b 337 -1169 331 -1168 334 -1169 b 366 -1146 346 -1169 356 -1162 b 376 -1009 370 -1138 376 -1071 b 374 -969 376 -995 374 -982 b 337 -806 372 -913 359 -858 b 336 -796 336 -804 336 -801 b 337 -788 336 -793 336 -791 b 370 -616 340 -778 370 -698 b 340 -482 370 -570 360 -524 b 369 -330 353 -445 369 -386 b 337 -203 369 -287 359 -242 b 369 -43 350 -167 369 -104 b 366 -4 369 -30 367 -17 b 341 75 360 26 353 50 b 369 222 354 111 369 167 b 366 264 369 236 369 251 b 220 495 350 351 317 390 b 46 740 148 573 71 596 b 17 768 45 753 26 768 b 0 750 9 768 0 750 l 0 -609 z m 300 24 b 321 -45 315 -4 321 -26 b 317 -75 321 -56 318 -65 l 298 -145 b 220 -58 278 -121 253 -94 b 56 187 148 20 81 43 b 55 193 56 189 56 192 b 300 24 137 193 220 157 z m 300 -261 b 321 -330 315 -289 321 -311 b 317 -360 321 -341 318 -350 b 300 -423 314 -374 307 -399 b 220 -334 279 -397 253 -370 b 56 -92 150 -256 79 -232 b 300 -261 135 -92 220 -127 z m 55 -386 b 73 -367 55 -384 65 -369 b 318 -622 189 -367 318 -505 b 315 -657 318 -634 317 -645 b 308 -690 312 -668 312 -680 b 292 -698 307 -694 300 -698 b 282 -693 288 -698 284 -697 b 216 -608 261 -661 240 -636 l 209 -600 b 55 -386 147 -527 84 -497 z m 300 292 b 321 223 315 264 321 242 b 317 193 321 212 318 203 b 301 135 314 180 308 158 b 220 228 281 161 255 190 b 55 461 151 304 79 327 b 300 292 134 461 220 426 z'\n },\n 'flag128thDown': {\n 'x_min': 0,\n 'x_max': 273,\n 'y_min': -580,\n 'y_max': 812,\n 'ha': 1392,\n 'o': 'm 17 -835 b 48 -806 27 -835 46 -819 b 229 -552 72 -657 154 -634 b 380 -310 330 -442 364 -402 b 384 -266 383 -295 384 -281 b 351 -105 384 -206 366 -143 b 384 27 372 -66 384 -16 b 351 189 384 88 366 151 b 380 278 366 216 374 243 b 383 320 383 291 383 305 b 351 484 383 382 364 445 b 384 629 374 526 384 580 b 356 780 384 704 361 766 b 351 793 356 785 351 789 b 356 804 351 796 353 799 l 361 814 b 393 958 380 850 387 865 l 393 973 b 333 1169 393 1002 383 1169 b 324 1168 330 1169 327 1169 b 304 1130 314 1164 304 1149 b 305 1120 304 1128 305 1125 b 334 962 317 1056 334 1011 b 289 821 334 922 323 880 b 0 619 180 625 88 622 l 0 -816 b 17 -835 0 -816 9 -835 z m 229 331 b 310 423 264 369 289 397 b 330 350 318 396 325 366 b 334 320 331 340 334 331 b 311 248 334 301 328 278 b 59 72 229 109 141 72 b 56 76 56 73 56 75 b 229 331 81 226 154 249 z m 56 -516 b 229 -258 75 -380 145 -348 b 311 -166 264 -220 289 -192 l 330 -238 b 334 -268 331 -248 334 -256 b 311 -340 334 -287 328 -310 b 56 -516 229 -478 137 -516 z m 56 -222 b 229 36 75 -86 145 -55 b 311 128 264 73 289 102 l 330 56 b 334 26 331 46 334 37 b 311 -46 334 7 328 -16 b 56 -222 229 -184 137 -222 z m 217 609 b 292 706 246 642 269 670 b 304 711 295 710 300 711 b 321 703 311 711 320 707 b 328 670 325 693 325 681 b 331 634 330 658 331 645 b 82 367 331 516 199 367 l 75 367 b 56 386 62 367 56 379 b 217 609 86 501 153 533 z'\n },\n 'accidentalFlat': {\n 'x_min': 0,\n 'x_max': 226,\n 'y_min': -175,\n 'y_max': 439,\n 'ha': 614,\n 'o': 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 82 -225 117 -186 b 325 82 281 -72 325 16 b 196 220 325 164 262 216 b 117 196 171 220 137 209 b 85 176 108 189 92 176 b 78 177 82 176 81 176 b 62 202 68 181 62 192 b 72 608 63 233 72 579 b 45 632 72 624 59 632 b 0 592 24 632 1 618 b 17 -245 0 592 6 -230 z m 66 73 b 167 144 76 102 134 144 b 226 60 209 144 226 96 b 98 -134 226 -17 160 -95 b 84 -138 92 -137 88 -138 b 68 -117 71 -138 68 -124 b 63 27 68 -117 63 -30 b 66 73 63 50 65 68 z'\n },\n 'accidentalNatural': {\n 'x_min': 0,\n 'x_max': 168,\n 'y_min': -335,\n 'y_max': 341,\n 'ha': 676,\n 'o': 'm 0 -268 b 12 -281 0 -276 4 -281 b 22 -278 13 -281 20 -279 b 164 -235 42 -269 122 -235 b 189 -251 179 -235 189 -239 l 189 -465 b 206 -482 189 -475 196 -482 l 225 -482 b 242 -465 233 -482 242 -475 l 242 258 b 230 269 242 265 236 269 b 225 268 229 269 226 269 l 203 261 b 197 259 200 261 199 259 b 68 226 197 259 105 226 b 53 233 59 226 53 228 l 53 474 b 36 491 53 484 45 491 l 17 491 b 0 474 7 491 0 484 z m 176 114 b 189 107 184 114 189 112 l 189 -42 b 71 -101 189 -68 107 -101 b 53 -92 60 -101 53 -98 l 53 56 b 176 114 53 76 141 114 z'\n },\n 'accidentalSharp': {\n 'x_min': 0,\n 'x_max': 249,\n 'y_min': -348,\n 'y_max': 350,\n 'ha': 698,\n 'o': 'm 12 37 b 49 53 17 37 45 50 b 53 55 50 53 52 55 b 72 29 63 55 72 40 l 72 -114 b 56 -147 72 -130 65 -143 b 17 -163 48 -150 17 -163 b 0 -186 7 -166 0 -177 l 0 -288 b 12 -301 0 -297 4 -301 b 17 -300 13 -301 16 -300 b 50 -287 17 -300 37 -291 b 55 -285 52 -285 53 -285 b 72 -308 65 -285 72 -301 l 72 -485 b 91 -501 72 -494 81 -501 b 115 -485 105 -501 115 -494 l 115 -285 b 130 -253 115 -266 122 -256 l 217 -217 b 223 -216 219 -217 222 -216 b 242 -242 235 -216 242 -233 l 242 -422 b 261 -438 242 -431 251 -438 b 285 -422 276 -438 285 -431 l 285 -217 b 301 -184 285 -206 291 -189 b 341 -168 311 -180 341 -168 b 359 -144 351 -164 359 -153 l 359 -42 b 348 -30 359 -35 354 -30 b 341 -32 346 -30 344 -30 l 304 -46 b 285 -20 295 -46 285 -37 l 285 114 b 304 156 285 124 292 151 l 341 170 b 359 194 351 174 359 186 l 359 297 b 348 308 359 304 354 308 b 341 307 346 308 344 308 b 305 294 341 307 312 295 b 285 312 295 294 285 301 l 285 488 b 265 504 285 497 276 504 b 242 488 251 504 242 497 l 242 301 b 223 259 240 287 236 268 b 132 223 206 249 157 229 b 115 252 120 223 115 240 l 115 425 b 95 441 115 433 105 441 b 72 425 81 441 72 433 l 72 230 b 55 192 72 210 63 196 b 17 176 46 187 17 176 b 0 153 7 173 0 161 l 0 50 b 12 37 0 42 4 37 z m 111 -43 b 115 63 111 1 112 52 b 220 118 118 88 184 118 b 242 109 230 118 239 115 b 248 27 245 102 248 66 b 242 -65 248 -12 245 -52 b 132 -122 233 -94 166 -122 b 115 -115 124 -122 117 -120 b 111 -43 112 -109 111 -78 z'\n },\n 'accidentalDoubleSharp': {\n 'x_min': 0,\n 'x_max': 247,\n 'y_min': -125,\n 'y_max': 127,\n 'ha': 252,\n 'o': 'm 0 -111 b 7 -166 0 -137 3 -163 b 65 -180 17 -174 40 -180 b 118 -166 86 -180 109 -176 b 130 -111 127 -158 130 -134 b 132 -105 130 -109 131 -107 b 177 -45 141 -85 158 -45 b 226 -111 196 -45 220 -91 b 233 -166 226 -137 228 -161 b 291 -180 243 -174 266 -180 b 356 -114 346 -180 356 -166 b 346 -56 356 -89 351 -63 b 288 -46 338 -49 312 -46 l 274 -46 b 206 1 258 -37 206 -9 b 274 50 206 22 253 43 b 291 49 279 50 285 49 b 346 63 314 49 336 55 b 356 115 353 71 356 92 b 292 183 356 174 351 183 b 233 173 266 183 240 180 b 226 117 228 168 226 143 b 179 49 219 101 196 49 b 130 117 158 49 135 96 b 118 173 130 141 125 167 b 66 183 112 180 89 183 b 7 173 42 183 16 180 b 0 120 3 170 0 145 b 7 63 0 94 3 68 b 68 49 17 55 43 49 b 82 50 73 49 78 50 b 150 3 98 42 150 13 b 84 -46 150 -16 104 -39 l 69 -46 b 7 -56 43 -46 16 -49 b 0 -111 3 -60 0 -85 z'\n },\n 'accidentalDoubleFlat': {\n 'x_min': 0,\n 'x_max': 411,\n 'y_min': -175,\n 'y_max': 437,\n 'ha': 612,\n 'o': 'm 17 -245 b 30 -252 22 -251 26 -252 b 39 -249 35 -252 39 -249 b 153 -161 84 -226 120 -186 b 274 -50 206 -124 246 -85 b 284 -245 276 -158 279 -240 b 295 -252 288 -251 292 -252 b 304 -249 300 -252 304 -249 b 416 -163 348 -226 383 -186 b 592 82 546 -72 592 16 b 461 217 592 163 528 216 l 452 217 b 384 194 426 217 408 207 b 350 176 374 189 363 176 b 343 177 347 176 344 176 b 328 202 333 180 328 190 b 337 606 328 232 337 579 b 310 629 337 622 324 629 b 265 592 291 629 268 616 b 269 194 265 592 266 395 b 196 217 248 209 223 217 l 187 217 b 120 194 160 217 143 207 b 85 176 108 189 98 176 b 78 177 82 176 81 176 b 62 202 68 180 62 190 b 72 606 62 232 72 579 b 45 629 72 622 59 629 b 0 592 24 629 1 616 b 17 -245 0 592 7 -232 z m 66 72 b 168 144 75 101 134 144 b 226 59 212 144 226 95 b 96 -134 226 -22 161 -94 b 84 -138 92 -137 86 -138 b 68 -115 72 -138 68 -124 b 63 26 68 -115 63 -30 b 66 72 63 49 65 66 z m 328 39 b 330 72 328 55 328 68 b 433 144 338 101 399 144 b 468 130 448 144 459 140 b 490 59 481 112 490 88 b 361 -134 490 -22 426 -94 b 348 -138 356 -137 351 -138 b 333 -115 337 -138 333 -124 b 328 39 333 -115 328 -16 z'\n },\n 'accidentalParensLeft': {\n 'x_min': 0,\n 'x_max': 141,\n 'y_min': -248,\n 'y_max': 247,\n 'ha': 495,\n 'o': 'm 199 -357 b 203 -354 200 -357 203 -356 l 203 -333 b 200 -327 203 -330 202 -328 b 86 0 118 -253 86 -160 b 200 324 86 158 120 251 b 203 331 202 325 203 327 l 203 351 b 202 356 203 354 203 356 b 0 0 60 281 0 140 b 199 -357 0 -144 60 -269 z'\n },\n 'accidentalParensRight': {\n 'x_min': 0,\n 'x_max': 141,\n 'y_min': -248,\n 'y_max': 247,\n 'ha': 495,\n 'o': 'm 0 331 b 3 324 0 327 1 325 b 117 0 84 251 117 158 b 3 -327 117 -160 85 -253 b 0 -333 1 -328 0 -330 l 0 -354 b 4 -357 0 -356 3 -357 b 203 0 143 -269 203 -144 b 1 356 203 140 143 281 b 0 351 0 356 0 354 z'\n },\n 'accidentalQuarterToneFlatStein': {\n 'x_min': 1,\n 'x_max': 227,\n 'y_min': -175,\n 'y_max': 439,\n 'ha': 614,\n 'o': 'm 174 -161 b 288 -249 210 -186 245 -225 b 297 -252 288 -249 292 -252 b 310 -245 301 -252 305 -251 b 327 592 321 -230 327 592 b 282 632 325 618 302 632 b 255 608 268 632 255 624 b 265 202 255 579 264 233 b 249 177 265 192 259 181 b 242 176 246 176 245 176 b 210 196 235 176 219 189 b 131 220 190 209 156 220 b 1 85 65 216 1 164 b 174 -161 1 16 46 -72 z m 101 60 b 160 144 101 96 118 144 b 261 73 193 144 251 102 b 264 27 262 68 264 50 b 259 -117 264 -30 259 -117 b 243 -138 259 -124 256 -138 b 229 -134 239 -138 235 -137 b 101 60 167 -95 101 -17 z'\n },\n 'accidentalThreeQuarterTonesFlatZimmermann': {\n 'x_min': 1,\n 'x_max': 466,\n 'y_min': -175,\n 'y_max': 439,\n 'ha': 614,\n 'o': 'm 363 -245 b 376 -252 367 -251 372 -252 b 384 -249 380 -252 384 -249 b 497 -161 428 -226 464 -186 b 671 84 625 -72 671 16 b 541 220 671 164 606 217 b 513 217 531 220 523 219 b 464 196 495 212 480 206 b 431 176 452 189 442 176 b 423 177 428 176 426 176 b 408 202 413 180 408 190 l 419 608 b 392 632 419 625 406 632 b 346 592 372 632 347 618 b 363 -245 346 592 351 -230 z m 177 -163 b 289 -249 210 -186 245 -226 b 297 -252 289 -249 292 -252 b 310 -245 300 -252 305 -251 b 328 592 321 -230 328 592 b 282 631 327 618 302 631 b 255 608 268 631 255 624 l 266 202 b 251 177 266 190 261 180 b 243 176 248 176 246 176 b 210 196 232 176 222 189 b 166 216 196 204 180 210 b 161 217 164 216 163 217 b 132 220 151 219 143 220 b 1 84 65 217 1 163 b 177 -163 1 16 48 -72 z m 102 60 b 124 128 102 88 111 112 b 161 144 134 138 147 144 b 199 134 173 144 184 141 b 262 72 219 122 256 92 b 265 26 264 66 265 49 b 261 -115 265 -30 261 -115 b 245 -138 261 -124 258 -138 b 230 -134 240 -138 236 -137 b 102 60 166 -92 102 -20 z m 409 26 b 412 72 409 49 410 66 b 514 144 420 102 480 144 b 570 60 557 144 570 96 b 442 -134 570 -23 508 -91 b 429 -138 436 -137 433 -138 b 413 -115 418 -138 413 -124 b 409 26 413 -115 409 -30 z'\n },\n 'accidentalQuarterToneSharpStein': {\n 'x_min': 0,\n 'x_max': 179,\n 'y_min': -353,\n 'y_max': 307,\n 'ha': 660,\n 'o': 'm 12 -315 b 85 -285 17 -315 76 -289 b 105 -312 92 -282 105 -301 l 105 -492 b 125 -508 105 -501 114 -508 b 150 -484 147 -508 150 -498 l 150 -285 b 151 -274 150 -281 150 -278 b 164 -253 153 -265 158 -256 b 240 -225 176 -251 240 -225 b 258 -202 249 -222 258 -210 l 258 -99 b 246 -86 258 -91 253 -86 b 240 -88 245 -86 242 -88 l 240 -86 b 168 -115 240 -86 174 -114 b 148 -91 158 -115 148 -107 l 148 43 b 167 85 148 55 156 81 b 240 114 180 91 240 114 b 258 138 249 118 258 128 l 258 240 b 246 252 258 248 252 252 b 240 251 245 252 242 252 b 168 225 240 251 171 225 b 150 253 156 225 150 240 l 150 426 b 130 442 150 435 141 442 b 105 418 108 442 105 429 l 105 230 b 91 193 105 219 101 202 b 17 161 65 183 42 171 b 0 138 9 158 0 147 l 0 36 b 12 23 0 27 4 23 b 17 24 13 23 16 24 b 85 53 17 24 73 49 b 89 55 86 53 88 55 b 107 30 98 55 107 42 l 107 -114 b 92 -145 107 -130 101 -143 l 17 -177 b 0 -200 9 -180 0 -192 l 0 -302 b 12 -315 0 -311 4 -315 z'\n },\n 'accidentalThreeQuarterTonesSharpStein': {\n 'x_min': 3,\n 'x_max': 317,\n 'y_min': -347,\n 'y_max': 369,\n 'ha': 716,\n 'o': 'm 14 -301 b 53 -287 16 -301 40 -291 b 62 -285 56 -285 59 -285 b 72 -298 69 -285 72 -289 l 72 -477 b 95 -500 72 -495 76 -500 b 118 -477 114 -500 118 -495 l 118 -278 b 127 -259 118 -269 121 -261 l 196 -232 b 207 -243 204 -232 207 -235 l 207 -432 b 230 -455 207 -452 212 -455 b 253 -432 249 -455 253 -451 l 253 -228 b 268 -204 253 -216 259 -207 l 320 -186 b 328 -183 323 -184 325 -183 b 337 -194 334 -183 337 -187 l 337 -387 b 360 -410 337 -408 341 -410 b 383 -387 379 -410 383 -406 l 383 -174 b 395 -157 383 -166 390 -158 l 445 -138 b 456 -127 452 -135 456 -132 l 456 -14 b 448 -3 456 -10 454 -3 b 399 -22 445 -3 408 -17 b 383 -6 387 -22 383 -22 l 383 163 b 392 181 383 173 384 179 b 445 202 397 183 445 202 b 456 213 452 203 456 207 l 456 324 b 448 336 456 330 454 336 b 393 317 445 336 400 320 b 389 315 392 315 390 315 b 383 325 386 315 383 318 l 383 508 b 360 531 383 528 379 531 b 337 508 341 531 337 527 l 337 318 b 325 291 337 300 334 294 b 268 268 320 288 287 276 b 253 281 256 268 253 274 l 253 464 b 230 487 253 484 249 487 b 207 464 212 487 207 482 l 207 264 b 194 240 207 253 204 245 l 132 217 b 128 216 131 217 130 216 b 118 229 122 216 118 220 l 118 420 b 95 444 118 439 114 444 b 72 420 76 444 72 439 l 72 212 b 60 190 72 197 68 193 l 16 173 b 4 161 9 170 4 167 l 4 50 b 13 39 4 45 9 39 b 58 55 16 39 46 49 b 63 56 60 56 62 56 b 72 42 71 56 72 50 l 72 -125 b 58 -150 72 -137 65 -147 l 16 -166 b 4 -177 9 -168 4 -171 l 4 -289 b 14 -301 4 -295 9 -301 z m 114 -48 b 118 78 114 6 115 68 b 200 114 122 91 180 114 b 207 111 204 114 206 112 b 212 22 210 107 212 66 b 207 -94 212 -29 210 -85 b 127 -130 203 -108 148 -130 b 118 -127 122 -130 120 -128 b 114 -48 114 -121 114 -86 z m 253 19 b 258 130 253 69 255 122 b 333 163 264 141 315 163 b 337 161 334 163 337 161 b 341 78 340 157 341 120 b 337 -45 341 24 340 -37 b 266 -78 333 -56 287 -78 b 258 -75 262 -78 259 -76 b 253 19 255 -71 253 -27 z'\n },\n 'accidentalBuyukMucennebFlat': {\n 'x_min': 1,\n 'x_max': 287,\n 'y_min': -174,\n 'y_max': 438,\n 'ha': 612,\n 'o': 'm 1 480 l 1 406 b 12 395 1 400 4 395 b 79 419 14 395 76 418 b 89 412 86 419 89 415 b 91 376 89 399 89 386 b 82 359 91 364 89 361 b 16 331 76 356 16 331 b 1 321 6 331 1 328 l 1 248 b 13 236 1 242 4 236 b 79 262 16 236 71 258 b 92 251 89 262 92 256 b 107 -242 95 23 101 -236 b 120 -251 111 -249 115 -251 b 128 -248 124 -251 128 -248 b 240 -160 171 -225 207 -184 b 413 84 367 -71 413 16 b 284 220 413 166 350 216 b 207 196 259 220 229 209 b 171 176 196 190 184 176 b 167 177 170 176 168 177 b 151 203 157 181 151 192 b 153 269 151 210 151 236 b 163 292 153 275 153 289 b 366 367 173 297 366 367 b 379 383 374 370 379 376 l 379 452 b 370 464 379 458 377 464 b 164 389 366 464 170 392 b 156 396 163 389 156 393 b 157 436 157 409 157 428 b 167 452 157 445 161 449 b 366 526 173 455 366 526 b 379 540 374 528 379 534 l 379 611 b 370 622 379 616 377 622 b 170 550 366 622 174 552 b 160 557 163 550 160 554 b 161 608 160 585 161 602 b 134 631 161 624 148 631 b 89 590 114 631 91 616 l 89 528 b 81 517 89 526 88 518 b 16 491 76 514 16 491 b 1 480 6 490 1 485 z m 154 73 b 219 135 160 92 197 124 b 255 144 232 141 243 144 b 292 130 269 144 282 140 b 314 62 305 114 314 91 b 186 -132 314 -17 251 -94 b 173 -137 180 -135 176 -137 b 157 -114 161 -137 157 -122 b 153 35 157 -114 153 -22 b 154 73 153 53 153 68 z'\n },\n 'accidentalBakiyeFlat': {\n 'x_min': -1,\n 'x_max': 286,\n 'y_min': -175,\n 'y_max': 439,\n 'ha': 614,\n 'o': 'm -1 248 b 9 236 -1 242 1 236 b 81 264 12 236 78 261 b 89 258 86 264 89 261 b 104 -245 92 30 96 -236 b 115 -252 108 -251 112 -252 b 124 -249 120 -252 124 -249 b 239 -161 167 -226 203 -186 b 412 84 367 -72 412 17 b 282 220 412 166 348 216 b 255 216 274 220 264 219 b 203 196 238 212 222 206 b 171 177 193 189 177 177 b 163 179 168 177 166 177 b 147 202 153 181 147 192 b 150 276 147 210 150 268 b 158 291 150 287 154 289 b 363 370 163 292 363 370 b 377 384 373 373 377 379 l 377 454 b 369 467 377 458 376 467 b 363 465 367 467 364 467 b 161 390 363 465 167 393 b 153 399 154 390 153 395 b 157 608 154 494 157 593 b 130 632 157 624 144 632 b 86 592 111 632 88 618 b 88 377 86 592 86 501 b 76 356 88 373 88 360 l 12 331 b -1 320 3 330 -1 327 z m 148 27 b 151 73 148 50 150 68 b 255 144 161 105 219 144 b 312 62 298 144 312 99 b 181 -134 312 -19 249 -96 b 167 -138 176 -137 171 -138 b 153 -117 156 -138 153 -125 b 148 27 153 -117 148 -30 z'\n },\n 'accidentalKomaSharp': {\n 'x_min': 0,\n 'x_max': 229,\n 'y_min': -337,\n 'y_max': 322,\n 'ha': 659,\n 'o': 'm 10 39 b 17 40 13 39 14 39 l 128 81 b 138 52 138 81 138 63 l 138 -91 b 124 -124 138 -107 132 -120 b 17 -167 115 -127 17 -167 b 0 -192 7 -171 0 -181 l 0 -294 b 10 -305 0 -301 4 -305 b 17 -304 13 -305 14 -305 b 127 -261 17 -304 117 -264 b 138 -276 138 -261 138 -262 l 138 -469 b 157 -485 138 -478 147 -485 b 181 -462 179 -485 181 -475 l 181 -262 b 183 -252 181 -258 181 -255 b 197 -232 186 -243 190 -235 b 312 -187 207 -228 312 -187 b 330 -163 323 -183 330 -173 l 330 -60 b 320 -49 330 -53 327 -49 b 312 -50 318 -49 315 -49 l 200 -94 b 193 -95 197 -95 194 -95 b 181 -68 183 -95 181 -85 l 181 66 b 200 108 181 92 189 104 l 312 151 b 330 176 323 156 330 166 l 330 278 b 320 289 330 285 327 289 b 312 288 318 289 315 289 b 200 246 312 288 203 248 b 181 275 187 246 181 264 l 181 448 b 163 464 181 456 173 464 b 138 441 140 464 138 452 l 138 253 b 122 215 137 240 132 225 b 17 177 92 203 45 177 b 0 153 7 173 0 163 l 0 50 b 10 39 0 43 4 39 z'\n },\n 'accidentalKucukMucennebSharp': {\n 'x_min': -1,\n 'x_max': 339,\n 'y_min': -338,\n 'y_max': 321,\n 'ha': 659,\n 'o': 'm -1 -45 l -1 -138 b 12 -154 -1 -145 3 -154 l 215 -79 b 220 -84 219 -79 220 -81 l 220 -105 b 210 -122 220 -115 219 -120 b 99 -168 202 -127 99 -168 b 82 -193 89 -173 82 -183 l 82 -295 b 92 -307 82 -302 86 -307 b 99 -305 95 -307 96 -307 b 209 -262 99 -305 199 -265 b 220 -278 220 -262 220 -264 l 220 -471 b 239 -487 220 -480 229 -487 b 264 -464 261 -487 264 -477 l 264 -264 b 265 -253 264 -259 264 -256 b 279 -233 268 -245 272 -236 b 395 -189 289 -229 395 -189 b 412 -164 405 -184 412 -174 l 412 -62 b 402 -50 412 -55 409 -50 b 395 -52 400 -50 397 -50 l 278 -96 b 264 -86 268 -96 264 -94 l 264 -68 b 269 -59 264 -62 265 -60 b 471 17 274 -58 471 17 b 488 36 484 22 488 27 l 488 127 b 477 144 488 134 487 144 b 471 141 475 144 472 141 l 471 143 b 274 68 471 143 282 71 b 268 66 272 68 269 66 b 264 71 264 66 264 69 l 264 92 b 271 102 264 98 265 99 l 395 150 b 412 174 405 154 412 164 l 412 276 b 402 288 412 284 409 288 b 395 287 400 288 397 288 b 282 245 395 287 285 246 b 264 274 269 245 264 262 l 264 446 b 245 462 264 455 255 462 b 220 439 222 462 220 451 l 220 252 b 204 213 219 239 215 223 b 99 176 174 202 127 176 b 82 151 89 171 82 161 l 82 49 b 92 37 82 42 86 37 b 99 39 95 37 96 37 l 210 79 b 216 81 212 81 215 81 b 220 78 219 81 220 79 l 220 56 b 216 46 220 52 220 48 b 16 -29 210 45 16 -29 b -1 -45 4 -32 -1 -36 z'\n },\n 'accidentalKoron': {\n 'x_min': 0,\n 'x_max': 300,\n 'y_min': -472,\n 'y_max': 157,\n 'ha': 629,\n 'o': 'm 0 -672 b 7 -680 0 -677 3 -680 l 45 -680 b 52 -672 49 -680 52 -677 l 52 -193 l 415 -22 b 432 -4 418 -20 432 -13 b 415 10 432 1 418 9 l 4 226 b 0 223 1 226 0 225 z m 327 -7 l 52 -137 l 52 144 z'\n },\n 'accidentalSori': {\n 'x_min': 0,\n 'x_max': 421,\n 'y_min': -318,\n 'y_max': 328,\n 'ha': 646,\n 'o': 'm 0 265 l 0 223 b 3 213 0 216 0 215 l 131 160 l 131 -150 l 3 -203 b 0 -212 0 -204 0 -206 l 0 -255 b 3 -259 0 -258 1 -259 l 131 -204 l 131 -451 b 138 -458 131 -455 134 -458 l 176 -458 b 183 -451 180 -458 183 -455 l 183 -183 l 330 -120 l 330 -410 b 337 -418 330 -415 333 -418 l 374 -418 b 382 -410 379 -418 382 -415 l 382 -98 l 589 -9 b 606 10 592 -9 606 0 b 589 23 606 16 592 22 l 382 109 l 382 465 b 374 472 382 469 379 472 l 337 472 b 330 465 333 472 330 469 l 330 132 l 183 194 l 183 425 b 176 432 183 429 180 432 l 138 432 b 131 425 134 432 131 429 l 131 216 l 3 269 b 0 265 0 269 0 266 z m 183 138 l 330 76 l 330 -66 l 183 -128 z m 501 6 l 382 -45 l 382 55 z'\n },\n 'articAccentAbove': {\n 'x_min': 0,\n 'x_max': 339,\n 'y_min': 1,\n 'y_max': 245,\n 'ha': 244,\n 'o': 'm 0 318 b 20 298 0 311 4 304 b 346 187 20 298 331 193 b 356 177 353 186 356 181 b 344 167 356 173 353 170 b 20 58 328 163 20 58 b 0 36 4 50 0 43 b 3 23 0 32 1 27 b 23 1 7 13 13 1 b 29 3 24 1 27 1 l 469 151 b 488 177 488 156 488 166 b 469 203 488 189 488 197 l 37 350 b 24 353 32 351 26 353 b 3 333 12 353 7 344 b 0 318 1 327 0 323 z'\n },\n 'articAccentBelow': {\n 'x_min': 0,\n 'x_max': 339,\n 'y_min': -244,\n 'y_max': 0,\n 'ha': 244,\n 'o': 'm 0 -35 b 20 -55 0 -42 4 -49 b 346 -166 20 -55 331 -160 b 356 -176 353 -167 356 -171 b 344 -186 356 -180 353 -183 b 20 -295 328 -190 20 -295 b 0 -317 4 -302 0 -310 b 3 -330 0 -321 1 -325 b 23 -351 7 -340 13 -351 b 29 -350 24 -351 27 -351 l 469 -202 b 488 -176 488 -197 488 -187 b 469 -150 488 -164 488 -156 l 37 -3 b 24 0 32 -1 26 0 b 3 -20 12 0 7 -9 b 0 -35 1 -26 0 -30 z'\n },\n 'articTenutoAbove': {\n 'x_min': -1,\n 'x_max': 338,\n 'y_min': 0,\n 'y_max': 48,\n 'ha': 48,\n 'o': 'm 33 0 l 452 0 b 487 35 485 0 487 16 b 452 69 487 53 487 69 l 33 69 b -1 35 -1 69 -1 53 b 33 0 -1 16 -1 0 z'\n },\n 'articTenutoBelow': {\n 'x_min': -1,\n 'x_max': 338,\n 'y_min': -48,\n 'y_max': 0,\n 'ha': 48,\n 'o': 'm 33 -69 l 452 -69 b 487 -35 485 -69 487 -53 b 452 0 487 -16 487 0 l 33 0 b -1 -35 -1 0 -1 -16 b 33 -69 -1 -53 -1 -69 z'\n },\n 'articStaccatoAbove': {\n 'x_min': 0,\n 'x_max': 84,\n 'y_min': 0,\n 'y_max': 84,\n 'ha': 84,\n 'o': 'm 60 0 b 121 60 94 0 121 27 b 60 121 121 94 94 121 b 0 60 27 121 0 94 b 60 0 0 27 27 0 z'\n },\n 'articStaccatoBelow': {\n 'x_min': 0,\n 'x_max': 84,\n 'y_min': -84,\n 'y_max': 0,\n 'ha': 84,\n 'o': 'm 60 -121 b 121 -60 94 -121 121 -94 b 60 0 121 -27 94 0 b 0 -60 27 0 0 -27 b 60 -121 0 -94 27 -121 z'\n },\n 'articStaccatissimoAbove': {\n 'x_min': 1,\n 'x_max': 100,\n 'y_min': -2,\n 'y_max': 293,\n 'ha': 295,\n 'o': 'm 1 390 b 72 -3 1 369 39 -3 b 144 389 108 -3 144 356 b 72 422 144 410 111 422 b 1 390 35 422 3 409 z'\n },\n 'articStaccatissimoBelow': {\n 'x_min': 1,\n 'x_max': 100,\n 'y_min': -295,\n 'y_max': 0,\n 'ha': 295,\n 'o': 'm 1 -393 b 72 -425 3 -412 35 -425 b 144 -392 111 -425 144 -413 b 72 0 144 -359 108 0 b 1 -393 39 0 1 -372 z'\n },\n 'articMarcatoAbove': {\n 'x_min': -1,\n 'x_max': 235,\n 'y_min': -1,\n 'y_max': 253,\n 'ha': 254,\n 'o': 'm -1 16 b 9 0 -1 9 1 1 b 16 -1 10 -1 14 -1 b 32 9 22 -1 29 1 b 112 186 32 9 109 180 b 118 190 114 189 115 190 b 127 186 121 190 124 189 b 209 9 128 180 209 9 b 225 0 213 3 219 0 l 323 0 b 338 16 333 1 338 7 b 337 23 338 19 338 22 l 181 356 b 167 364 177 361 173 364 b 153 356 157 364 153 356 l 0 23 b -1 16 -1 20 -1 19 z'\n },\n 'articMarcatoBelow': {\n 'x_min': -1,\n 'x_max': 235,\n 'y_min': -254,\n 'y_max': 0,\n 'ha': 254,\n 'o': 'm -1 -17 b 0 -24 -1 -20 -1 -23 l 156 -357 b 170 -366 160 -363 164 -366 b 184 -357 180 -366 184 -357 l 337 -24 b 338 -17 338 -22 338 -20 b 328 -1 338 -10 336 -3 b 321 0 327 0 323 0 b 305 -10 315 0 308 -3 b 225 -187 305 -10 228 -181 b 219 -192 223 -190 222 -192 b 210 -187 216 -192 213 -190 b 128 -10 209 -181 128 -10 b 112 -1 124 -4 118 -1 l 14 -1 b -1 -17 4 -3 -1 -9 z'\n },\n 'fermataAbove': {\n 'x_min': 3,\n 'x_max': 605,\n 'y_min': -3,\n 'y_max': 329,\n 'ha': 332,\n 'o': 'm 4 14 b 23 -4 4 0 12 -4 b 52 26 36 -4 43 6 b 56 39 53 27 55 33 b 435 318 73 98 138 318 b 818 36 742 318 804 91 b 821 26 819 32 819 27 b 851 -4 831 6 837 -4 b 871 16 864 -4 871 1 b 870 30 871 20 871 24 b 438 474 780 471 480 474 b 6 30 392 474 94 471 b 4 14 4 24 4 19 z m 359 75 b 436 -4 359 32 395 -4 b 516 75 480 -4 516 32 b 436 153 516 117 480 153 b 359 75 395 153 359 117 z'\n },\n 'fermataBelow': {\n 'x_min': 3,\n 'x_max': 605,\n 'y_min': -332,\n 'y_max': 0,\n 'ha': 332,\n 'o': 'm 6 -35 b 438 -478 94 -475 392 -478 b 870 -35 480 -478 780 -475 b 871 -20 871 -29 871 -24 b 851 0 871 -6 864 0 b 821 -30 837 0 831 -10 b 818 -40 819 -32 819 -36 b 435 -323 804 -95 742 -323 b 56 -43 138 -323 73 -102 b 52 -30 55 -37 53 -32 b 23 0 43 -10 36 0 b 4 -19 12 0 4 -4 b 6 -35 4 -23 4 -29 z m 436 -157 b 516 -79 480 -157 516 -121 b 436 0 516 -36 480 0 b 359 -79 395 0 359 -36 b 436 -157 359 -121 395 -157 z'\n },\n 'breathMarkComma': {\n 'x_min': 1,\n 'x_max': 152,\n 'y_min': 2,\n 'y_max': 251,\n 'ha': 249,\n 'o': 'm 1 271 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 19 32 29 26 26 b 27 14 26 17 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 b 1 271 42 361 1 321 z'\n },\n 'breathMarkUpbow': {\n 'x_min': 1,\n 'x_max': 249,\n 'y_min': 1,\n 'y_max': 495,\n 'ha': 494,\n 'o': 'm 1 690 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 z'\n },\n 'caesura': {\n 'x_min': 0,\n 'x_max': 384,\n 'y_min': -1,\n 'y_max': 532,\n 'ha': 533,\n 'o': 'm 258 1 b 271 -1 262 -1 266 -1 b 308 26 287 -1 302 9 l 552 713 b 553 726 553 717 553 721 b 513 766 553 747 534 766 b 475 739 495 766 481 756 l 232 52 b 230 39 230 48 230 43 b 258 1 230 23 240 7 z m 27 1 b 40 -1 32 -1 36 -1 b 78 26 58 -1 72 9 l 321 713 b 323 726 323 717 323 721 b 282 766 323 747 304 766 b 245 739 265 766 251 756 l 3 52 b 0 37 1 48 0 42 b 27 1 0 22 10 7 z'\n },\n 'caesuraCurved': {\n 'x_min': 0,\n 'x_max': 373,\n 'y_min': 0,\n 'y_max': 530,\n 'ha': 530,\n 'o': 'm 0 29 b 29 0 0 14 12 0 b 53 16 39 0 48 6 l 82 69 b 314 716 187 264 314 498 b 268 763 314 742 295 763 b 222 719 245 763 223 744 b 29 98 209 507 117 295 l 3 39 b 0 29 1 36 0 33 z m 223 27 b 252 0 223 13 233 0 b 276 16 262 0 272 6 b 537 716 386 230 537 478 b 491 763 537 742 518 763 b 445 719 468 763 446 744 b 252 98 432 507 340 295 l 226 39 b 223 27 225 35 223 32 z'\n },\n 'restMaxima': {\n 'x_min': 0,\n 'x_max': 381,\n 'y_min': -249,\n 'y_max': 250,\n 'ha': 499,\n 'o': 'm 369 331 l 369 -330 b 392 -359 369 -354 379 -359 l 524 -359 b 549 -330 539 -359 549 -354 l 549 331 b 524 360 549 356 539 360 l 392 360 b 369 331 379 360 369 356 z m 23 -359 l 156 -359 b 180 -330 170 -359 180 -354 l 180 331 b 156 360 180 356 170 360 l 23 360 b 0 331 10 360 0 356 l 0 -330 b 23 -359 0 -354 10 -359 z'\n },\n 'restDoubleWhole': {\n 'x_min': 0,\n 'x_max': 125,\n 'y_min': 0,\n 'y_max': 250,\n 'ha': 250,\n 'o': 'm 23 0 l 156 0 b 180 22 170 0 180 10 l 180 338 b 156 360 180 350 170 360 l 23 360 b 0 338 10 360 0 350 l 0 22 b 23 0 0 10 10 0 z'\n },\n 'restWhole': {\n 'x_min': 0,\n 'x_max': 282,\n 'y_min': -135,\n 'y_max': 9,\n 'ha': 144,\n 'o': 'm 37 -194 l 369 -194 b 406 -157 389 -194 406 -177 l 406 -24 b 369 13 406 -3 389 13 l 37 13 b 0 -24 16 13 0 -3 l 0 -157 b 37 -194 0 -177 16 -194 z'\n },\n 'restHalf': {\n 'x_min': 0,\n 'x_max': 282,\n 'y_min': -2,\n 'y_max': 142,\n 'ha': 144,\n 'o': 'm 37 -3 l 369 -3 b 406 35 389 -3 406 14 l 406 167 b 369 204 406 189 389 204 l 37 204 b 0 167 16 204 0 189 l 0 35 b 37 -3 0 14 16 -3 z'\n },\n 'restQuarter': {\n 'x_min': 1,\n 'x_max': 270,\n 'y_min': -375,\n 'y_max': 373,\n 'ha': 748,\n 'o': 'm 168 -527 b 206 -540 180 -536 194 -540 b 228 -531 216 -540 226 -537 b 230 -521 229 -527 230 -524 b 207 -487 230 -508 219 -497 b 170 -435 189 -487 173 -448 b 164 -397 166 -423 164 -410 b 255 -292 164 -338 194 -292 b 367 -317 297 -292 344 -308 b 372 -318 369 -317 370 -318 b 382 -320 376 -320 379 -320 b 389 -314 386 -320 389 -318 b 336 -232 389 -297 351 -249 b 236 -32 281 -166 236 -112 b 238 -13 236 -26 238 -19 b 333 199 243 71 295 140 b 338 220 337 206 338 213 b 333 248 338 235 333 248 b 95 526 333 248 120 501 b 69 537 88 533 78 537 b 40 507 55 537 40 527 b 46 484 40 500 42 492 b 134 291 52 468 134 395 b 48 108 134 238 112 176 b 27 66 33 94 27 78 b 42 32 27 46 42 32 l 112 -55 b 174 -141 135 -84 156 -111 b 183 -161 177 -147 183 -158 b 181 -167 183 -163 183 -166 b 166 -174 179 -173 173 -174 b 143 -170 160 -174 148 -171 b 120 -166 135 -170 127 -166 b 1 -304 58 -166 1 -228 b 168 -527 1 -376 63 -446 z'\n },\n 'rest8th': {\n 'x_min': 0,\n 'x_max': 247,\n 'y_min': -251,\n 'y_max': 174,\n 'ha': 425,\n 'o': 'm 39 81 b 117 56 62 65 89 56 b 173 66 137 56 157 60 b 225 88 193 72 206 78 b 232 89 228 89 230 89 b 239 76 238 89 239 84 b 238 60 239 72 239 66 b 104 -343 233 39 130 -248 b 145 -361 104 -360 137 -361 b 196 -347 161 -361 181 -359 b 341 161 200 -344 341 161 b 356 217 347 187 354 210 b 338 240 356 232 341 239 b 323 235 336 240 331 240 b 193 140 312 226 240 140 l 193 154 b 96 251 193 207 150 251 b 0 154 43 251 0 207 b 39 81 0 124 17 98 z'\n },\n 'rest16th': {\n 'x_min': 0,\n 'x_max': 320,\n 'y_min': -500,\n 'y_max': 179,\n 'ha': 679,\n 'o': 'm 115 -301 b 223 -271 153 -301 190 -288 b 229 -278 226 -271 229 -274 b 228 -282 229 -279 228 -281 l 91 -690 b 89 -694 91 -691 89 -693 b 134 -720 89 -706 102 -720 b 189 -687 176 -720 183 -703 l 356 -138 b 420 81 393 -16 420 81 b 459 226 420 81 456 207 b 461 232 459 229 461 230 b 446 248 461 240 449 246 b 431 242 439 248 435 245 b 300 145 420 233 348 147 l 300 160 b 202 258 300 215 256 258 b 104 160 148 258 104 215 b 219 62 104 101 164 62 b 331 94 258 62 298 75 b 341 96 336 95 338 96 b 348 86 346 96 348 94 b 265 -173 348 63 275 -151 b 194 -217 253 -200 215 -217 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 151 -105 b 0 -203 43 -105 0 -148 b 115 -301 0 -262 60 -301 z'\n },\n 'rest32nd': {\n 'x_min': 0,\n 'x_max': 363,\n 'y_min': -500,\n 'y_max': 426,\n 'ha': 926,\n 'o': 'm 0 -203 b 115 -301 0 -262 60 -301 b 228 -269 154 -301 194 -288 b 232 -268 229 -268 230 -268 b 240 -276 236 -268 240 -272 b 138 -688 240 -282 141 -678 b 137 -697 137 -691 137 -694 b 176 -720 137 -708 145 -720 b 232 -690 222 -720 226 -706 b 484 436 236 -672 484 436 b 521 582 484 436 518 564 b 523 588 521 585 523 586 b 508 603 523 600 511 603 b 492 598 501 603 497 600 b 361 503 482 590 410 503 l 361 516 b 264 613 361 570 318 613 b 166 516 210 613 166 570 b 206 444 166 487 183 461 b 246 423 217 433 232 428 b 284 418 258 420 269 418 b 393 449 321 418 360 432 b 399 451 395 451 397 451 b 415 428 409 451 415 436 b 413 422 415 426 413 423 l 357 192 b 279 140 350 168 302 140 b 281 153 281 144 281 148 b 183 251 281 207 236 251 b 85 153 128 251 85 207 b 125 81 85 124 102 98 b 164 60 137 71 150 65 b 203 55 176 58 189 55 b 311 86 240 55 278 69 b 315 88 312 88 314 88 b 325 69 323 88 325 76 l 268 -167 b 194 -217 261 -197 216 -216 b 196 -203 196 -212 196 -207 b 98 -105 196 -148 153 -105 b 0 -203 45 -105 0 -148 z'\n },\n 'rest64th': {\n 'x_min': 0,\n 'x_max': 423,\n 'y_min': -753,\n 'y_max': 430,\n 'ha': 1183,\n 'o': 'm 0 -554 b 40 -626 0 -583 17 -609 b 118 -652 60 -644 92 -652 b 210 -629 145 -652 186 -642 b 216 -628 213 -628 215 -628 b 228 -644 223 -628 228 -635 b 226 -652 228 -647 226 -649 l 122 -1054 b 121 -1064 121 -1058 121 -1061 b 167 -1084 121 -1077 134 -1084 b 215 -1060 202 -1084 209 -1076 b 402 -278 217 -1047 229 -1021 b 436 -135 403 -278 431 -161 l 570 441 b 609 588 570 441 605 569 b 596 609 609 603 602 608 b 580 603 589 609 585 606 b 448 507 569 595 497 507 b 449 521 449 511 449 516 b 351 619 449 575 405 619 b 253 521 297 619 253 575 b 372 422 253 461 317 422 b 481 454 410 422 446 438 b 491 456 484 455 488 456 b 504 441 498 456 504 451 b 501 426 504 436 503 432 b 445 202 500 422 451 217 b 359 144 435 174 383 144 l 359 158 b 261 256 359 212 315 256 b 163 158 207 256 163 212 b 243 65 163 112 202 78 b 279 60 255 62 266 60 b 397 91 320 60 360 73 b 403 92 400 92 402 92 b 412 79 409 92 412 86 b 410 72 412 76 412 75 b 351 -161 408 59 356 -150 b 281 -212 340 -199 301 -212 l 281 -197 b 183 -99 281 -144 238 -99 b 85 -197 130 -99 85 -144 b 125 -271 85 -228 102 -253 b 166 -291 138 -279 151 -287 b 204 -297 177 -294 192 -297 b 262 -287 225 -297 245 -292 b 305 -265 282 -279 287 -274 b 310 -264 307 -264 308 -264 b 318 -284 317 -264 318 -275 b 317 -295 318 -288 317 -294 b 259 -524 315 -302 265 -508 b 194 -567 251 -554 213 -567 b 196 -554 196 -563 196 -559 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 z'\n },\n 'rest128th': {\n 'x_min': 0,\n 'x_max': 485,\n 'y_min': -750,\n 'y_max': 689,\n 'ha': 1439,\n 'o': 'm 118 -652 b 176 -642 138 -652 160 -648 b 180 -641 177 -642 179 -641 b 228 -621 197 -635 210 -629 b 232 -619 229 -621 230 -619 b 239 -626 236 -619 239 -622 b 238 -632 239 -628 239 -631 b 131 -1057 235 -642 134 -1050 b 173 -1080 131 -1071 140 -1080 b 230 -1057 219 -1080 225 -1074 l 658 815 b 697 960 658 815 694 942 b 698 966 697 963 698 965 b 684 982 698 975 687 981 b 668 976 677 982 672 979 b 537 880 658 969 586 881 l 537 894 b 439 992 537 949 494 992 b 341 894 386 992 341 949 b 382 822 341 865 359 840 b 459 796 402 805 433 796 b 517 806 480 796 501 801 b 521 808 518 806 520 808 b 569 828 539 814 552 819 b 580 831 572 829 577 831 b 598 812 589 831 598 825 b 596 801 598 809 598 805 b 540 575 590 773 546 595 b 448 510 534 553 475 510 l 448 524 b 350 622 448 577 405 622 b 252 524 297 622 252 577 b 292 451 252 494 269 468 b 369 426 318 433 337 426 b 429 435 389 426 412 429 b 494 464 449 442 475 455 b 498 465 495 465 497 465 b 505 446 504 465 505 456 b 503 426 505 439 504 432 l 446 202 b 366 144 439 173 389 144 l 366 158 b 268 256 366 212 323 256 b 170 158 215 256 170 212 b 289 59 170 98 235 59 b 347 69 310 59 330 63 b 397 91 367 76 379 82 b 406 94 400 92 403 94 b 415 79 412 94 415 88 b 412 63 415 75 413 69 b 357 -157 408 42 364 -134 b 281 -212 346 -196 302 -212 b 282 -197 281 -207 282 -203 b 184 -99 282 -144 238 -99 b 86 -197 130 -99 86 -144 b 204 -297 86 -258 150 -297 b 262 -287 225 -297 245 -292 b 312 -265 282 -279 294 -274 b 318 -264 314 -264 317 -264 b 327 -275 324 -264 327 -269 b 266 -517 324 -287 278 -490 b 200 -569 248 -566 220 -567 l 196 -554 b 98 -456 196 -500 153 -456 b 0 -554 45 -456 0 -500 b 118 -652 0 -615 63 -652 z'\n },\n 'dynamicPiano': {\n 'x_min': -89,\n 'x_max': 366,\n 'y_min': -142,\n 'y_max': 274,\n 'ha': 416,\n 'o': 'm -128 -187 b -111 -204 -128 -199 -122 -204 l 167 -204 b 186 -186 180 -204 186 -199 b 168 -168 186 -174 180 -168 l 111 -168 b 98 -164 102 -168 98 -168 b 101 -154 98 -163 99 -158 l 166 7 b 179 24 168 14 171 24 b 213 -1 186 24 190 10 b 276 -14 233 -12 252 -14 b 527 266 415 -14 527 130 b 395 395 527 350 475 395 b 292 357 350 395 318 380 b 262 328 272 340 268 328 b 246 363 255 328 259 338 b 177 393 236 380 215 393 b 1 251 92 393 46 333 b -9 223 -6 238 -9 230 b 7 207 -9 213 -1 207 b 30 229 17 207 23 216 b 127 338 72 301 101 338 b 143 321 138 338 143 331 b 134 285 143 310 138 295 l -43 -154 b -65 -168 -48 -166 -50 -168 l -109 -168 b -128 -187 -122 -168 -128 -174 z m 207 81 b 235 180 207 111 219 140 l 264 251 b 356 341 284 300 321 341 b 389 288 380 341 389 320 b 243 35 389 217 312 35 b 207 81 219 35 207 50 z'\n },\n 'dynamicMezzo': {\n 'x_min': -20,\n 'x_max': 446,\n 'y_min': -10,\n 'y_max': 274,\n 'ha': 284,\n 'o': 'm -29 223 b -13 207 -29 213 -22 207 b 9 226 -3 207 1 215 b 107 338 52 300 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 287 323 225 292 255 323 b 308 302 304 323 308 314 b 294 249 308 285 302 269 b 203 24 294 248 292 248 b 199 9 200 17 199 13 b 215 0 199 3 203 0 l 285 0 b 308 17 298 0 302 3 l 402 251 b 481 323 419 292 449 323 b 503 302 498 323 503 314 b 413 43 503 252 413 104 b 478 -14 413 6 436 -14 b 629 102 533 -14 583 26 b 642 132 638 117 642 125 b 629 145 642 141 636 145 b 608 127 619 145 615 138 b 534 49 580 84 553 49 b 523 62 526 49 523 53 b 606 317 523 112 606 238 b 528 395 606 353 588 395 b 431 350 487 395 454 374 b 409 330 416 336 415 330 b 397 360 402 330 406 341 b 334 395 389 379 370 395 b 236 350 292 395 259 374 b 215 330 222 336 220 330 b 203 360 207 330 212 340 b 147 393 194 379 174 393 b -19 251 71 393 26 331 b -29 223 -26 238 -29 230 z'\n },\n 'dynamicForte': {\n 'x_min': -141,\n 'x_max': 364,\n 'y_min': -152,\n 'y_max': 444,\n 'ha': 596,\n 'o': 'm -203 -122 b -95 -219 -203 -186 -156 -219 b 161 17 14 -219 82 -145 b 269 315 203 105 235 194 b 289 336 269 323 284 336 l 383 336 b 406 359 399 336 406 343 b 384 380 406 373 399 380 l 298 380 b 284 387 288 380 284 380 b 287 405 284 392 285 396 b 419 606 315 530 347 606 b 442 595 431 606 442 603 b 419 580 442 586 435 588 b 389 526 400 572 389 552 b 454 465 389 485 418 465 b 524 543 491 465 524 490 b 400 639 524 596 491 639 b 135 402 261 639 183 540 b 107 380 128 380 127 380 l 23 380 b 0 357 7 380 0 373 b 22 336 0 343 7 336 l 105 336 b 117 330 114 336 117 336 b 114 315 117 327 115 323 l 23 0 b -101 -187 -17 -141 -43 -187 b -127 -174 -120 -187 -127 -181 b -92 -156 -127 -163 -114 -170 b -63 -102 -75 -144 -63 -125 b -128 -43 -63 -65 -89 -43 b -203 -122 -171 -43 -203 -78 z'\n },\n 'dynamicRinforzando': {\n 'x_min': -20,\n 'x_max': 277,\n 'y_min': 0,\n 'y_max': 274,\n 'ha': 274,\n 'o': 'm -13 207 b 9 226 -3 207 3 215 b 107 338 52 301 81 338 b 122 321 118 338 122 331 b 114 285 122 310 118 295 l 9 24 b 4 9 6 17 4 13 b 20 0 4 3 9 0 l 91 0 b 114 17 104 0 108 3 l 207 251 b 304 351 226 298 272 351 b 318 343 312 351 318 348 b 287 285 318 330 287 325 b 338 239 287 256 308 239 b 399 318 373 239 399 268 b 324 395 399 360 377 395 b 235 350 287 395 256 374 b 215 330 222 336 220 330 b 203 360 207 330 213 337 b 145 393 194 379 174 393 b -19 251 75 393 27 337 b -29 223 -26 238 -29 230 b -13 207 -29 213 -22 207 z'\n },\n 'dynamicSforzando': {\n 'x_min': 0,\n 'x_max': 229,\n 'y_min': -10,\n 'y_max': 273,\n 'ha': 283,\n 'o': 'm 125 -14 b 291 120 219 -14 291 36 b 220 232 291 160 276 190 b 151 314 168 271 151 287 b 213 361 151 337 168 361 b 258 346 238 361 258 356 b 240 333 258 340 251 340 b 226 298 232 325 226 314 b 276 252 226 269 248 252 b 330 307 311 252 330 279 b 212 393 330 360 285 393 b 68 274 127 393 68 350 b 145 161 68 223 95 196 b 200 85 187 132 200 114 b 127 20 200 53 173 20 b 66 42 91 20 66 32 b 91 56 66 49 75 46 b 111 98 104 65 111 79 b 59 145 111 127 86 145 b 0 78 24 145 0 117 b 125 -14 0 30 49 -14 z'\n },\n 'dynamicZ': {\n 'x_min': -30,\n 'x_max': 244,\n 'y_min': -10,\n 'y_max': 268,\n 'ha': 278,\n 'o': 'm -24 -1 b 4 16 -12 -1 -3 10 b 39 30 16 24 27 30 b 179 -14 79 30 108 -14 b 297 102 259 -14 297 43 b 245 166 297 147 271 166 b 197 115 219 166 197 145 b 236 72 197 88 216 72 b 259 79 251 72 255 79 b 264 75 262 79 264 78 b 258 60 264 72 261 66 b 229 45 252 50 242 45 b 117 95 186 45 173 95 b 85 86 98 95 89 86 b 102 111 85 86 95 104 l 333 338 b 351 370 344 350 351 359 b 333 386 351 380 343 386 b 298 377 321 386 314 382 b 239 370 282 373 259 370 b 94 383 153 370 111 383 b 68 364 79 383 72 377 l 33 264 b 29 242 30 255 29 248 b 45 228 29 232 36 228 b 66 249 55 228 60 236 l 81 279 b 96 297 85 288 88 297 b 168 292 102 297 127 292 b 223 302 194 292 215 302 b 196 269 229 302 197 271 l -26 45 b -43 16 -37 33 -43 27 b -24 -1 -43 6 -36 -1 z'\n },\n 'ornamentTrill': {\n 'x_min': 0,\n 'x_max': 521,\n 'y_min': -10,\n 'y_max': 390,\n 'ha': 400,\n 'o': 'm 95 210 b 140 213 112 210 131 213 b 144 209 143 213 144 212 b 140 194 144 206 143 202 l 124 156 b 96 58 108 117 96 88 b 179 -14 96 17 124 -14 b 325 153 253 -14 325 46 b 307 251 325 187 320 219 b 302 265 304 258 302 261 b 334 294 302 274 311 281 l 343 298 b 455 348 393 328 428 348 b 474 327 468 348 474 344 b 465 285 474 312 469 295 l 360 24 b 356 9 357 17 356 13 b 372 0 356 3 360 0 l 442 0 b 465 17 455 0 459 3 l 559 251 b 655 351 577 298 624 351 b 670 343 664 351 670 348 b 638 285 670 330 638 325 b 690 239 638 256 660 239 b 750 318 724 239 750 268 b 675 395 750 360 729 395 b 586 350 638 395 608 374 b 566 330 573 336 572 330 b 553 361 559 330 564 340 b 490 393 543 380 521 393 b 347 348 432 393 377 364 b 312 333 328 338 320 333 b 308 337 310 333 308 334 b 315 359 308 343 312 351 l 387 537 b 392 553 390 544 392 549 b 383 562 392 559 389 562 b 364 557 377 562 369 559 l 294 534 b 269 511 281 530 275 526 l 217 384 b 206 367 212 370 210 367 b 179 380 200 367 192 374 b 118 393 158 389 140 393 b 0 292 50 393 0 353 b 95 210 0 248 30 210 z m 118 360 b 192 325 134 360 192 347 b 186 307 192 321 189 314 l 180 292 b 148 265 173 274 167 269 b 98 258 130 261 112 258 b 39 301 50 258 39 281 b 118 360 39 327 60 360 z m 196 48 b 207 92 196 59 202 78 b 264 230 207 94 209 94 b 272 240 266 238 268 240 b 279 229 276 240 276 236 b 292 151 279 204 292 177 b 212 30 292 88 253 30 b 196 48 200 30 196 37 z'\n },\n 'ornamentTurn': {\n 'x_min': 0,\n 'x_max': 460,\n 'y_min': 0,\n 'y_max': 218,\n 'ha': 218,\n 'o': 'm 0 148 b 128 0 0 45 66 0 b 209 63 173 0 209 20 b 157 115 209 95 187 115 b 84 82 115 115 114 82 b 36 150 59 82 36 112 b 130 242 36 212 79 242 b 285 134 176 242 223 203 b 513 1 356 56 419 1 b 662 166 608 1 662 73 b 534 314 662 269 596 314 b 454 251 490 314 454 294 b 505 199 454 219 475 199 b 579 232 547 199 549 232 b 626 164 603 232 626 202 b 533 72 626 102 583 72 b 377 180 487 72 439 111 b 150 312 307 258 243 312 b 0 148 55 312 0 240 z'\n },\n 'ornamentTurnSlash': {\n 'x_min': 0,\n 'x_max': 460,\n 'y_min': -90,\n 'y_max': 306,\n 'ha': 396,\n 'o': 'm 0 147 b 128 -1 0 43 66 -1 b 209 62 173 -1 209 19 b 157 114 209 94 187 114 b 84 81 115 114 114 81 b 36 148 59 81 36 111 b 130 240 36 210 79 240 b 285 128 176 240 222 197 b 307 79 304 108 307 105 l 307 -107 b 330 -130 307 -122 312 -130 b 353 -107 347 -130 353 -122 l 353 37 b 360 59 353 53 353 59 b 402 33 369 59 376 49 b 513 0 435 13 471 0 b 662 164 608 0 662 72 b 534 312 662 268 596 312 b 454 249 490 312 454 292 b 505 197 454 217 475 197 b 579 230 547 197 549 230 b 626 163 603 230 626 200 b 533 71 626 101 583 71 b 377 183 487 71 441 114 b 356 232 359 203 356 206 l 356 418 b 333 441 356 433 350 441 b 310 418 315 441 310 433 l 310 274 b 302 252 310 258 308 252 b 261 278 294 252 287 262 b 150 311 228 298 192 311 b 0 147 55 311 0 239 z'\n },\n 'ornamentMordent': {\n 'x_min': 1,\n 'x_max': 729,\n 'y_min': -73,\n 'y_max': 319,\n 'ha': 392,\n 'o': 'm 30 59 b 88 94 53 59 73 79 b 144 143 107 109 124 127 b 176 161 158 154 168 161 b 197 144 183 161 189 156 l 323 10 b 351 0 328 3 340 0 b 377 9 361 0 372 3 b 498 114 392 17 475 94 l 498 -105 l 544 -105 l 544 153 b 562 160 550 157 556 160 b 585 144 569 160 576 156 b 710 10 590 135 697 24 b 737 0 716 3 727 0 b 765 9 749 0 759 3 b 1030 295 776 17 1011 274 l 1032 300 b 1050 328 1041 308 1050 318 b 1012 353 1050 343 1024 353 b 986 343 1002 353 994 348 b 854 190 971 330 871 206 b 828 176 842 180 835 176 b 802 190 818 176 809 183 b 681 333 791 202 696 320 b 645 353 668 344 657 353 b 613 340 634 353 626 350 b 580 304 600 330 590 315 l 546 265 l 546 459 l 501 459 l 501 216 l 459 167 b 449 156 455 164 452 160 b 302 327 397 216 310 317 b 258 353 291 338 282 351 b 226 340 245 353 238 348 b 193 304 213 330 203 317 l 187 298 b 72 167 148 255 109 212 l 20 107 b 1 73 12 98 1 84 b 30 59 1 65 9 59 z'\n },\n 'ornamentShortTrill': {\n 'x_min': 0,\n 'x_max': 725,\n 'y_min': 0,\n 'y_max': 245,\n 'ha': 245,\n 'o': 'm 0 72 b 29 58 0 63 7 58 b 88 92 50 58 72 78 b 143 141 105 109 124 125 b 147 144 144 143 145 144 b 174 160 158 153 168 160 b 197 143 181 160 187 154 b 321 10 203 135 310 24 b 350 0 327 3 338 0 b 377 7 361 0 372 3 l 436 65 b 469 92 449 72 459 84 b 524 141 487 109 505 125 l 528 145 b 533 148 531 147 531 148 b 554 160 541 154 550 160 b 577 143 562 160 569 154 b 703 10 585 135 691 24 b 732 0 708 3 720 0 b 759 7 743 0 753 3 b 1024 294 769 16 1005 272 b 1044 327 1032 305 1044 321 b 1005 353 1044 341 1018 353 b 979 343 996 353 988 348 b 848 189 963 330 864 204 b 821 174 837 179 828 174 b 796 189 811 174 804 181 b 674 331 783 202 688 318 b 641 351 662 343 651 351 b 606 340 628 351 619 350 b 573 304 593 328 583 315 b 452 167 533 258 491 213 l 445 158 l 301 325 b 256 353 291 338 282 350 b 225 340 246 353 238 350 b 192 304 212 328 203 315 l 17 107 b 0 72 12 96 0 76 z'\n },\n 'ornamentTremblement': {\n 'x_min': 1,\n 'x_max': 985,\n 'y_min': 0,\n 'y_max': 244,\n 'ha': 244,\n 'o': 'm 1 72 b 30 58 1 63 9 58 b 89 92 52 58 73 78 l 144 141 b 148 144 147 143 147 144 b 176 160 160 153 170 160 b 199 143 183 160 189 154 b 324 10 204 134 311 23 b 351 0 330 3 340 0 b 379 7 363 0 373 3 b 488 111 386 13 446 72 b 520 141 498 122 508 132 b 524 144 521 143 523 144 b 552 160 536 153 546 160 b 575 143 559 160 564 154 b 698 10 580 134 687 23 b 727 0 704 3 716 0 b 755 7 739 0 749 3 l 899 141 b 930 160 913 153 923 160 b 952 143 937 160 943 154 l 1077 10 b 1107 0 1084 3 1096 0 b 1133 7 1117 0 1128 3 b 1398 294 1143 16 1380 272 b 1418 327 1407 305 1418 321 b 1381 351 1418 343 1394 351 b 1354 341 1371 351 1362 348 b 1223 189 1338 328 1238 204 b 1195 174 1211 179 1202 174 b 1171 189 1185 174 1178 181 b 1048 331 1158 200 1063 318 b 1012 351 1035 343 1024 351 b 981 338 1002 351 994 350 b 948 304 968 328 958 315 b 827 166 907 258 865 212 b 821 160 825 164 822 163 l 678 325 b 634 351 667 338 657 350 b 602 338 621 351 613 348 b 569 304 590 328 580 315 l 444 161 b 302 325 392 222 311 317 b 258 351 291 338 281 350 b 228 338 245 351 238 348 b 193 304 215 328 204 315 l 19 107 b 1 72 13 96 1 76 z'\n },\n 'ornamentPrecompAppoggTrill': {\n 'x_min': 0,\n 'x_max': 1119,\n 'y_min': 0,\n 'y_max': 481,\n 'ha': 481,\n 'o': 'm 121 0 b 249 68 168 0 232 53 b 279 94 262 75 271 86 b 336 144 298 111 315 128 b 367 163 350 156 360 163 b 389 145 374 163 380 157 b 514 12 395 137 501 26 b 543 1 520 4 531 1 b 569 9 553 1 563 4 b 636 73 576 14 605 43 l 658 94 b 714 144 677 111 694 128 b 746 163 729 156 739 163 b 768 145 753 163 759 157 b 893 12 773 137 880 26 b 922 1 899 4 910 1 b 948 9 932 1 942 4 l 1012 71 b 1037 94 1022 78 1030 86 b 1092 144 1054 111 1073 128 b 1123 161 1106 156 1115 161 b 1146 145 1130 161 1136 157 b 1270 12 1152 137 1259 26 b 1299 1 1276 4 1287 1 b 1326 9 1310 1 1320 4 b 1591 297 1336 19 1572 275 b 1611 328 1600 307 1611 320 b 1574 354 1611 343 1585 354 b 1548 344 1565 354 1555 350 b 1416 192 1532 331 1431 206 b 1388 177 1404 181 1395 177 b 1365 190 1380 177 1371 184 b 1243 333 1352 203 1256 321 b 1205 354 1228 346 1217 354 b 1174 341 1195 354 1187 351 b 1140 305 1161 330 1152 317 l 1015 163 b 873 328 963 223 880 318 b 828 354 860 344 847 353 b 796 341 816 354 809 351 b 763 305 783 331 773 317 b 642 168 721 261 681 215 b 636 163 641 167 639 164 b 494 328 585 223 501 318 b 449 354 481 344 468 353 b 418 341 438 354 431 351 b 384 305 405 331 395 317 b 264 168 343 261 302 215 l 242 144 b 144 88 232 124 171 88 b 79 197 81 88 79 189 l 79 648 b 60 693 79 683 71 693 b 52 691 58 693 55 693 b 0 616 3 672 0 625 l 0 207 b 121 0 0 40 68 0 z'\n },\n 'ornamentPrecompSlideTrillDAnglebert': {\n 'x_min': 2,\n 'x_max': 1150,\n 'y_min': -367,\n 'y_max': 245,\n 'ha': 612,\n 'o': 'm 3 -144 b 4 -168 3 -153 3 -160 b 246 -482 24 -315 99 -422 b 458 -528 340 -521 410 -528 b 514 -526 485 -528 504 -526 b 552 -508 531 -526 552 -517 b 514 -497 552 -503 541 -498 l 503 -497 b 194 -390 432 -494 298 -488 b 69 -151 194 -390 69 -279 b 184 96 69 -60 128 27 b 328 183 202 118 258 183 b 477 96 413 183 454 118 b 559 10 510 62 552 19 b 588 0 566 3 576 0 b 613 7 598 0 609 3 b 723 112 622 14 681 73 b 789 161 733 122 776 161 b 811 144 796 161 802 156 b 936 10 816 135 923 24 b 965 0 942 3 953 0 b 991 7 975 0 985 3 b 1051 66 996 12 1022 37 b 1081 92 1063 73 1073 84 b 1136 143 1099 109 1117 127 b 1168 160 1151 154 1159 160 b 1191 144 1175 160 1181 156 b 1315 10 1197 135 1303 24 b 1344 0 1320 3 1332 0 b 1371 7 1355 0 1365 3 b 1636 295 1381 17 1617 274 b 1656 327 1644 305 1656 318 b 1619 353 1656 341 1630 353 b 1593 343 1610 353 1600 348 b 1460 190 1577 330 1476 204 b 1433 176 1449 180 1440 176 b 1410 189 1424 176 1416 183 b 1287 331 1397 202 1300 320 b 1250 353 1273 344 1261 353 b 1218 340 1240 353 1231 350 b 1185 304 1205 328 1197 315 l 1058 160 b 916 327 1007 220 923 317 b 871 353 903 343 890 351 b 840 340 860 353 852 350 b 806 304 827 330 816 315 b 685 167 765 259 724 213 l 680 160 l 615 235 b 419 344 582 275 523 344 b 3 -144 258 344 3 26 z'\n },\n 'ornamentPrecompSlideTrillBach': {\n 'x_min': 0,\n 'x_max': 1048,\n 'y_min': -367,\n 'y_max': 331,\n 'ha': 698,\n 'o': 'm 0 -144 b 1 -168 0 -153 0 -160 b 243 -482 22 -315 96 -422 b 455 -528 337 -521 408 -528 b 511 -526 482 -528 501 -526 b 549 -508 528 -526 549 -517 b 511 -497 549 -503 539 -498 l 500 -497 b 192 -390 429 -494 295 -488 b 66 -151 127 -336 66 -238 b 189 105 66 -58 127 35 b 232 143 203 118 216 131 b 264 161 246 154 256 161 b 285 144 271 161 276 156 b 410 10 291 135 397 24 b 439 0 416 3 428 0 b 465 7 449 0 459 3 l 531 72 b 554 92 540 78 547 86 b 611 143 573 109 590 127 b 642 161 625 154 635 161 b 664 144 649 161 655 156 b 789 10 670 135 776 24 b 818 0 795 3 806 0 b 844 7 828 0 838 3 b 904 66 850 12 876 37 b 935 92 916 73 924 84 b 979 134 949 107 963 121 l 979 -88 l 1037 -88 l 1037 151 l 1044 144 b 1168 10 1050 135 1156 24 b 1197 0 1174 3 1185 0 b 1224 7 1208 0 1218 3 b 1489 295 1234 17 1470 274 b 1509 327 1498 305 1509 318 b 1472 353 1509 341 1483 353 b 1446 343 1463 353 1453 348 b 1313 190 1430 330 1329 204 b 1286 176 1302 180 1293 176 b 1263 189 1277 176 1269 183 b 1140 331 1250 202 1153 320 b 1103 353 1126 344 1115 353 b 1071 340 1093 353 1084 350 b 1038 304 1058 328 1050 315 l 1038 477 l 979 477 l 979 238 l 912 160 b 769 327 858 220 775 317 b 724 353 756 343 743 351 b 693 340 713 353 706 350 b 660 304 680 330 670 315 b 539 167 618 259 577 213 b 533 161 536 166 534 163 b 390 327 480 220 396 317 b 346 353 377 343 364 351 l 340 353 b 308 340 330 353 321 350 b 275 304 295 330 285 315 b 117 122 220 243 168 186 b 0 -144 68 62 0 -48 z'\n },\n 'ornamentPrecompTrillSuffixDandrieu': {\n 'x_min': 0,\n 'x_max': 949,\n 'y_min': 0,\n 'y_max': 381,\n 'ha': 381,\n 'o': 'm 0 73 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 174 161 157 154 167 161 b 196 144 181 161 187 156 b 321 10 202 135 308 24 b 350 0 327 3 338 0 b 376 7 360 0 370 3 b 485 112 384 14 444 73 b 552 161 495 122 539 161 b 573 144 559 161 564 156 b 698 10 579 135 685 24 b 727 0 704 3 716 0 b 753 7 737 0 747 3 b 863 112 762 14 821 73 b 929 161 873 122 916 161 b 950 144 936 161 942 156 b 1076 10 956 135 1063 24 b 1104 0 1081 3 1093 0 b 1130 7 1115 0 1125 3 b 1236 108 1139 14 1195 69 b 1367 314 1297 160 1367 233 b 1250 521 1367 419 1318 482 b 1107 549 1211 537 1145 549 b 1083 546 1096 549 1087 549 b 1066 528 1071 540 1066 534 b 1079 520 1066 524 1070 520 b 1323 351 1187 517 1323 487 b 1201 171 1323 269 1260 219 b 1194 166 1201 171 1198 168 b 1056 327 1142 226 1063 317 b 1011 353 1043 343 1030 351 b 979 340 999 353 992 350 b 946 304 966 330 956 315 b 825 167 904 259 864 213 l 821 161 b 678 327 768 222 685 317 b 634 353 665 343 652 351 b 602 340 622 353 615 350 b 569 304 589 330 579 315 b 448 167 527 259 487 213 l 444 161 b 301 327 390 222 308 317 b 256 353 288 343 275 351 b 225 340 245 353 238 350 b 192 304 212 330 202 315 b 71 167 150 259 109 213 b 17 105 52 147 36 127 b 0 73 10 98 0 84 z'\n },\n 'ornamentPrecompDoubleCadenceUpperPrefix': {\n 'x_min': 0,\n 'x_max': 1278,\n 'y_min': 0,\n 'y_max': 247,\n 'ha': 247,\n 'o': 'm 1 285 b 308 0 42 190 157 0 b 530 120 415 1 482 63 b 559 144 539 128 549 137 b 590 163 573 156 583 163 b 612 145 598 163 603 157 b 739 10 618 137 724 24 b 768 0 744 3 756 0 b 793 7 778 0 788 3 b 903 114 802 14 861 75 l 939 144 b 971 163 953 156 963 163 b 992 145 978 163 984 157 b 1119 10 998 137 1106 24 b 1148 0 1125 3 1136 0 b 1174 7 1158 0 1168 3 b 1284 114 1182 14 1241 75 b 1316 144 1282 115 1312 141 b 1348 161 1331 156 1339 161 b 1371 145 1355 161 1361 157 b 1496 10 1377 137 1485 24 b 1525 0 1502 3 1513 0 b 1552 7 1536 0 1547 3 b 1819 298 1562 17 1800 276 b 1840 330 1829 308 1840 320 b 1832 344 1840 334 1837 340 b 1801 356 1820 351 1810 356 b 1776 346 1793 356 1783 351 b 1642 192 1760 333 1659 206 b 1614 177 1630 181 1621 177 b 1591 190 1606 177 1597 184 b 1469 334 1578 203 1482 323 b 1430 356 1453 347 1441 356 b 1398 343 1420 356 1411 353 b 1365 307 1385 331 1377 318 l 1240 164 b 1097 330 1187 226 1104 320 b 1053 356 1084 346 1071 354 b 1021 343 1041 356 1034 353 b 988 307 1008 333 998 318 b 865 168 946 262 904 216 l 861 163 b 717 330 808 223 724 320 b 672 356 704 346 691 354 b 641 343 661 356 654 353 b 608 307 628 333 618 318 b 485 168 566 262 524 216 l 455 134 b 284 46 409 88 351 46 b 16 285 148 46 32 265 b 3 295 9 292 4 295 b 0 291 1 295 0 292 b 1 285 0 288 1 285 z'\n },\n 'ornamentPrecompDoubleCadenceUpperPrefixTurn': {\n 'x_min': 0,\n 'x_max': 1277,\n 'y_min': -62,\n 'y_max': 333,\n 'ha': 395,\n 'o': 'm 0 289 b 1 284 0 287 1 284 b 308 -1 42 189 157 -1 b 530 118 415 0 481 62 b 557 143 539 127 547 135 b 590 161 572 154 582 161 b 612 144 598 161 603 156 b 737 9 618 135 724 24 b 768 -1 743 1 755 -1 b 793 6 778 -1 788 1 b 903 112 802 13 861 73 l 937 143 b 971 161 953 154 963 161 b 992 144 978 161 984 156 b 1117 9 998 135 1104 24 b 1148 -1 1123 1 1136 -1 b 1174 6 1158 -1 1168 1 l 1230 60 l 1230 -89 l 1273 -89 l 1273 102 l 1283 112 b 1348 160 1295 125 1332 160 b 1371 144 1355 160 1361 156 b 1496 9 1377 135 1483 24 b 1525 -1 1502 1 1513 -1 b 1552 6 1536 -1 1547 1 b 1819 297 1562 16 1800 275 b 1839 328 1827 307 1839 320 b 1801 354 1839 343 1813 354 b 1776 344 1793 354 1783 350 b 1642 190 1760 331 1657 206 b 1614 176 1630 180 1621 176 b 1591 189 1606 176 1597 183 b 1467 333 1578 203 1480 321 b 1430 354 1453 346 1441 354 b 1398 341 1420 354 1411 351 b 1365 305 1385 330 1377 317 l 1273 202 l 1273 480 l 1230 480 l 1230 174 l 1097 328 b 1053 354 1084 344 1071 353 b 1021 341 1041 354 1034 351 b 988 305 1008 331 998 317 b 865 167 945 261 904 215 l 861 161 b 717 328 808 222 724 318 b 672 354 704 344 691 353 b 641 341 661 354 654 351 b 608 305 628 331 618 317 b 485 167 564 261 524 215 b 455 132 474 156 465 144 b 284 45 410 88 350 45 b 14 284 148 45 30 264 b 3 294 9 291 4 294 b 0 289 1 294 0 291 z'\n },\n 'ornamentPrecompTrillLowerSuffix': {\n 'x_min': 0,\n 'x_max': 859,\n 'y_min': -222,\n 'y_max': 246,\n 'ha': 468,\n 'o': 'm 0 73 b 29 58 0 65 7 58 b 86 92 56 59 72 79 b 143 143 105 109 122 127 b 176 161 157 154 168 161 b 197 144 183 161 189 156 b 323 9 203 135 310 23 b 353 -1 328 1 340 -1 b 379 6 363 -1 373 1 b 488 112 387 13 446 73 l 523 143 b 556 161 539 154 549 161 b 577 144 563 161 569 156 b 703 9 583 135 690 23 b 733 -1 708 1 721 -1 b 759 6 743 -1 753 1 b 868 112 768 13 827 73 b 955 183 878 122 943 183 b 1081 107 965 183 1031 153 b 1156 -89 1128 63 1156 6 l 1156 -102 b 948 -297 1156 -204 1048 -297 b 806 -271 904 -297 850 -282 l 792 -266 b 801 -288 792 -268 795 -282 b 948 -320 809 -297 880 -320 b 1237 -50 1092 -320 1237 -199 b 1164 217 1237 75 1218 122 b 1031 351 1138 259 1063 351 b 1011 337 1020 351 1024 347 b 828 167 952 291 886 217 l 824 164 b 683 328 772 225 690 318 b 638 354 670 344 657 353 b 606 341 626 354 619 351 b 573 305 593 331 583 317 b 451 167 530 261 490 215 l 446 161 b 302 328 393 222 310 318 b 258 354 289 344 276 353 b 226 341 246 354 239 351 b 193 305 213 331 203 317 b 71 167 150 261 109 215 b 17 105 52 147 36 127 b 0 73 10 98 0 84 z'\n },\n 'stringsDownBow': {\n 'x_min': 0,\n 'x_max': 312,\n 'y_min': 0,\n 'y_max': 318,\n 'ha': 318,\n 'o': 'm 17 0 l 37 0 b 55 17 46 0 55 7 l 55 253 b 225 278 55 269 140 278 b 395 253 310 278 395 269 l 395 17 b 413 0 395 7 403 0 l 432 0 b 449 17 441 0 449 7 l 449 420 b 412 458 449 441 432 458 l 37 458 b 0 420 17 458 0 441 l 0 17 b 17 0 0 7 9 0 z'\n },\n 'stringsUpBow': {\n 'x_min': 1,\n 'x_max': 249,\n 'y_min': 1,\n 'y_max': 495,\n 'ha': 494,\n 'o': 'm 1 690 b 3 683 1 687 1 685 l 154 22 b 181 1 157 10 167 1 b 206 22 193 1 203 10 l 359 683 l 359 688 b 338 713 359 700 351 710 l 333 713 b 308 694 321 713 311 706 l 180 140 l 53 694 b 27 713 49 706 39 713 l 22 713 b 1 690 10 710 1 700 z'\n },\n 'stringsHarmonic': {\n 'x_min': 0,\n 'x_max': 200,\n 'y_min': 0,\n 'y_max': 200,\n 'ha': 200,\n 'o': 'm 144 0 b 288 144 223 0 288 65 b 144 288 288 225 223 288 b 0 144 65 288 0 225 b 144 0 0 65 65 0 z m 39 144 b 144 249 39 203 86 249 b 249 144 203 249 249 203 b 144 39 249 86 203 39 b 39 144 86 39 39 86 z'\n },\n 'pluckedSnapPizzicatoAbove': {\n 'x_min': 0,\n 'x_max': 200,\n 'y_min': 0,\n 'y_max': 300,\n 'ha': 300,\n 'o': 'm 144 0 b 288 144 223 0 288 63 b 167 285 288 215 235 275 l 167 432 l 121 432 l 121 285 b 0 144 52 275 0 215 b 144 0 0 63 65 0 z m 39 144 b 121 246 39 193 73 236 l 121 144 l 167 144 l 167 246 b 249 144 213 236 249 193 b 144 39 249 85 202 39 b 39 144 85 39 39 85 z'\n },\n 'pluckedSnapPizzicatoBelow': {\n 'x_min': 0,\n 'x_max': 200,\n 'y_min': 0,\n 'y_max': 300,\n 'ha': 300,\n 'o': 'm 121 145 l 121 0 l 167 0 l 167 145 b 288 288 235 157 288 216 b 144 432 288 369 223 432 b 0 288 65 432 0 369 b 121 145 0 216 52 157 z m 39 288 b 144 393 39 347 86 393 b 249 288 203 393 249 347 b 167 186 249 238 215 196 l 167 288 l 121 288 l 121 186 b 39 288 75 196 39 238 z'\n },\n 'pluckedLeftHandPizzicato': {\n 'x_min': 0,\n 'x_max': 272,\n 'y_min': 0,\n 'y_max': 272,\n 'ha': 272,\n 'o': 'm 0 219 l 0 173 l 173 173 l 173 0 l 219 0 l 219 173 l 392 173 l 392 219 l 219 219 l 219 392 l 173 392 l 173 219 z'\n },\n 'keyboardPedalPed': {\n 'x_min': 0,\n 'x_max': 1019,\n 'y_min': -8,\n 'y_max': 555,\n 'ha': 563,\n 'o': 'm 122 376 b 240 540 189 376 240 452 b 225 586 240 579 233 586 b 204 549 213 586 212 573 b 138 480 199 527 181 480 b 85 549 96 480 85 517 l 85 554 b 353 762 89 690 230 762 b 373 752 364 762 373 760 b 351 708 373 740 360 723 b 274 546 330 675 274 585 b 353 416 274 508 333 444 b 412 304 372 390 412 351 b 382 228 412 275 403 256 b 334 190 363 202 361 200 b 147 29 271 167 147 88 b 196 -12 147 4 171 -12 b 343 108 239 -12 279 33 l 363 132 b 387 150 370 141 376 150 b 543 -4 445 150 467 -4 b 631 42 567 -4 586 0 l 668 78 b 685 89 674 84 680 89 b 696 75 688 89 690 86 b 809 -9 717 29 753 -9 b 946 66 854 -9 894 13 b 988 107 971 92 981 107 b 1002 89 994 107 996 99 b 1152 -4 1030 36 1077 -4 b 1329 248 1238 -4 1329 82 b 792 717 1329 556 1047 665 b 766 720 785 719 775 720 b 747 703 752 720 747 711 b 780 680 747 693 756 685 b 1223 222 1028 621 1223 504 b 1152 39 1223 122 1205 39 b 1073 229 1104 39 1073 132 b 1132 423 1073 314 1086 377 b 1142 442 1140 432 1142 436 b 1126 458 1142 451 1136 458 b 1093 446 1119 458 1109 455 b 975 216 1022 408 975 337 l 975 190 b 943 121 975 160 972 150 b 852 69 899 76 877 69 b 776 148 816 69 786 117 b 773 163 775 154 773 158 b 786 177 773 167 776 170 l 801 187 b 937 366 867 235 937 284 b 844 454 937 422 900 454 b 665 217 711 454 665 331 b 671 153 665 197 667 176 l 671 147 b 662 134 671 143 670 140 b 605 111 639 118 625 111 b 521 160 572 111 546 135 b 451 203 497 184 474 197 b 426 212 435 207 426 206 b 436 230 426 216 429 220 b 510 389 464 269 510 340 b 429 521 510 435 480 462 b 369 629 387 570 369 599 b 402 720 369 648 384 691 b 462 763 425 759 446 763 b 611 624 540 763 611 704 b 564 575 611 592 590 575 b 501 602 540 575 520 582 b 474 622 492 611 487 622 b 459 603 465 622 459 615 b 603 471 459 570 510 471 b 711 588 670 471 711 524 b 422 799 711 742 554 799 l 413 799 b 179 749 327 798 261 789 b 0 517 107 713 0 632 b 122 376 0 454 37 376 z m 1405 0 b 1467 62 1441 0 1467 26 b 1405 124 1467 98 1441 124 b 1344 62 1369 124 1344 98 b 1405 0 1344 26 1369 0 z m 756 282 b 815 403 756 346 772 403 b 848 343 838 403 848 383 b 780 226 848 295 824 261 b 765 217 773 220 768 217 b 759 228 762 217 759 220 b 756 282 757 245 756 262 z'\n },\n 'keyboardPedalUp': {\n 'x_min': 0,\n 'x_max': 450,\n 'y_min': 0,\n 'y_max': 450,\n 'ha': 450,\n 'o': 'm 66 252 b 132 281 94 252 115 264 b 183 308 153 301 161 308 l 190 308 b 236 271 216 308 236 300 b 216 239 236 261 229 252 l 210 233 b 158 219 197 220 184 219 b 73 147 114 219 73 196 b 147 73 73 107 107 73 b 219 158 196 73 219 114 b 233 210 219 184 220 197 l 239 216 b 271 236 252 229 261 236 b 308 190 300 236 308 216 l 308 183 b 281 132 308 161 301 153 b 252 66 264 115 252 94 b 324 0 252 23 285 0 b 396 66 363 0 396 23 b 367 132 396 94 384 115 b 340 183 347 153 340 161 l 340 190 b 377 236 340 216 348 236 b 409 216 387 236 396 229 l 415 210 b 429 158 428 197 429 184 b 501 73 429 114 452 73 b 575 147 541 73 575 107 b 490 219 575 196 534 219 b 438 233 464 219 451 220 l 432 239 b 412 271 419 252 412 261 b 458 308 412 300 432 308 l 465 308 b 516 281 487 308 495 301 b 582 252 533 264 554 252 b 648 324 625 252 648 285 b 582 396 648 363 625 396 b 516 367 554 396 533 384 b 465 340 495 347 487 340 l 458 340 b 412 377 432 340 412 348 b 432 409 412 387 419 396 l 438 415 b 490 429 451 428 464 429 b 575 501 534 429 575 452 b 501 575 575 541 541 575 b 429 490 452 575 429 534 b 415 438 429 464 428 451 l 409 432 b 377 412 396 419 387 412 b 340 458 348 412 340 432 l 340 465 b 367 516 340 487 347 495 b 396 582 384 533 396 554 b 324 648 396 625 363 648 b 252 582 285 648 252 625 b 281 516 252 554 264 533 b 308 465 301 495 308 487 l 308 458 b 271 412 308 432 300 412 b 239 432 261 412 252 419 l 233 438 b 219 490 220 451 219 464 b 147 575 219 534 196 575 b 73 501 107 575 73 541 b 158 429 73 452 114 429 b 210 415 184 429 197 428 l 216 409 b 236 377 229 396 236 387 b 190 340 236 348 216 340 l 183 340 b 132 367 161 340 153 347 b 66 396 115 384 94 396 b 0 324 23 396 0 363 b 66 252 0 285 23 252 z m 271 324 b 324 377 271 357 291 377 b 377 324 357 377 377 357 b 324 271 377 291 357 271 b 271 324 291 271 271 291 z'\n },\n 'pictChokeCymbal': {\n 'x_min': 1,\n 'x_max': 152,\n 'y_min': 2,\n 'y_max': 251,\n 'ha': 249,\n 'o': 'm 1 271 b 82 190 1 222 35 190 b 122 160 118 190 122 160 b 125 144 124 154 125 150 b 102 88 125 124 115 105 b 37 32 78 56 40 35 b 26 19 32 29 26 26 b 27 14 26 17 27 16 b 37 3 29 6 33 3 b 181 102 85 3 158 66 b 219 239 210 147 219 197 l 219 249 b 104 361 219 317 170 361 b 1 271 42 361 1 321 z'\n },\n 'wiggleArpeggiatoUp': {\n 'x_min': -33,\n 'x_max': 292,\n 'y_min': 0,\n 'y_max': 119,\n 'ha': 119,\n 'o': 'm -29 42 b -10 46 -23 42 -16 43 b 56 63 12 56 29 63 b 248 0 121 63 135 0 b 419 127 361 0 410 104 b 420 132 420 130 420 131 b 412 140 420 137 416 140 b 386 130 403 140 392 134 b 334 107 367 117 353 107 b 318 108 330 107 324 107 b 240 138 289 112 265 128 b 130 171 209 153 168 171 b -39 68 16 171 -14 91 b -48 53 -45 62 -48 58 b -29 42 -48 46 -39 42 z'\n },\n 'arrowheadBlackUp': {\n 'x_min': 0,\n 'x_max': 228,\n 'y_min': 0,\n 'y_max': 299,\n 'ha': 299,\n 'o': 'm 0 20 b 19 1 0 4 7 1 b 166 50 43 16 160 50 b 308 1 171 50 289 13 b 312 0 310 1 311 0 b 328 20 321 0 328 12 b 166 431 328 30 220 274 b 0 20 111 274 0 30 z'\n },\n 'arrowheadBlackDown': {\n 'x_min': 0,\n 'x_max': 228,\n 'y_min': 0,\n 'y_max': 299,\n 'ha': 299,\n 'o': 'm 166 0 b 328 410 220 157 328 400 b 312 431 328 419 321 431 b 308 429 311 431 310 429 b 166 380 289 418 171 380 b 19 429 160 380 43 415 b 0 410 7 429 0 426 b 166 0 0 400 111 157 z'\n },\n 'arpeggiatoUp': {\n 'x_min': 1,\n 'x_max': 229,\n 'y_min': 7,\n 'y_max': 1511,\n 'ha': 1504,\n 'o': 'm 121 1848 b 92 1778 115 1822 101 1800 l 89 1773 b 59 1668 75 1741 59 1702 b 96 1555 59 1614 76 1580 b 99 1551 98 1554 99 1551 l 102 1547 b 124 1496 115 1531 124 1515 b 122 1482 124 1492 124 1488 b 92 1404 118 1453 102 1428 b 59 1293 78 1372 59 1332 b 105 1172 59 1234 81 1198 b 124 1123 115 1158 124 1145 b 122 1110 124 1119 122 1115 b 92 1032 118 1081 102 1057 b 59 922 78 1001 59 960 b 115 792 59 855 86 816 b 124 760 121 782 124 773 b 122 744 124 756 124 750 b 92 667 118 716 102 693 b 59 556 78 635 59 595 b 108 433 59 495 82 458 b 124 389 117 420 124 408 b 122 374 124 384 124 379 b 92 298 118 346 102 323 l 89 292 b 59 186 75 261 59 222 b 163 19 59 73 140 42 b 177 10 168 13 173 10 b 189 29 184 10 189 19 b 184 48 189 35 187 42 b 167 114 174 69 167 85 b 230 305 167 179 229 193 b 181 423 230 357 209 396 b 167 484 173 442 167 458 b 230 675 167 547 229 563 b 179 796 230 729 206 769 b 167 850 171 812 167 827 b 230 1040 167 913 229 929 b 183 1158 230 1092 209 1130 b 167 1220 173 1178 167 1194 b 230 1411 167 1284 229 1300 b 186 1526 230 1462 210 1499 b 167 1594 176 1529 167 1584 b 230 1786 167 1659 229 1673 b 219 1848 230 1809 226 1829 l 330 1848 l 164 2176 l 1 1848 z'\n },\n 'arpeggiatoDown': {\n 'x_min': 1,\n 'x_max': 229,\n 'y_min': -4,\n 'y_max': 1500,\n 'ha': 1504,\n 'o': 'm 1 323 l 164 -6 l 330 323 l 219 323 b 230 384 226 341 230 361 b 167 576 229 497 167 511 b 186 644 167 586 176 641 b 230 759 210 671 230 708 b 167 950 229 870 167 886 b 183 1012 167 976 173 992 b 230 1130 209 1040 230 1079 b 167 1320 229 1241 167 1257 b 179 1374 167 1344 171 1358 b 230 1495 206 1401 230 1441 b 167 1686 229 1607 167 1623 b 181 1747 167 1712 173 1728 b 230 1865 209 1774 230 1813 b 167 2056 229 1977 167 1992 b 184 2123 167 2085 174 2101 b 189 2141 187 2128 189 2136 b 177 2160 189 2151 184 2160 b 163 2151 173 2160 168 2157 b 59 1984 140 2128 59 2097 b 89 1878 59 1948 75 1909 l 92 1872 b 122 1796 102 1848 118 1824 b 124 1781 124 1791 124 1786 b 108 1737 124 1763 117 1750 b 59 1614 82 1712 59 1675 b 92 1503 59 1575 78 1535 b 122 1426 102 1477 118 1454 b 124 1410 124 1420 124 1414 b 115 1378 124 1397 121 1388 b 59 1248 86 1354 59 1315 b 92 1138 59 1210 78 1169 b 122 1060 102 1113 118 1089 b 124 1047 122 1056 124 1051 b 105 998 124 1025 115 1012 b 59 877 81 972 59 936 b 92 766 59 838 78 798 b 122 688 102 742 118 717 b 124 674 124 683 124 678 b 102 624 124 655 115 639 l 99 619 b 96 615 99 619 98 616 b 59 503 76 590 59 556 b 89 397 59 468 75 429 l 92 392 b 121 323 101 370 115 348 z'\n },\n 'repeat1Bar': {\n 'x_min': 0,\n 'x_max': 532,\n 'y_min': -250,\n 'y_max': 279,\n 'ha': 529,\n 'o': 'm 0 -350 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 z m 586 -161 b 675 -251 586 -210 626 -251 b 766 -161 726 -251 766 -210 b 675 -71 766 -111 726 -71 b 586 -161 626 -71 586 -111 z m 0 197 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 b 0 197 40 288 0 248 z'\n },\n 'repeat2Bars': {\n 'x_min': 0,\n 'x_max': 762,\n 'y_min': -250,\n 'y_max': 279,\n 'ha': 529,\n 'o': 'm 0 -350 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 z m 343 -360 l 485 -360 b 516 -340 498 -360 508 -348 l 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 b 343 -360 331 -356 336 -360 z m 917 -161 b 1007 -251 917 -210 958 -251 b 1097 -161 1057 -251 1097 -210 b 1007 -71 1097 -111 1057 -71 b 917 -161 958 -71 917 -111 z m 89 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 b 0 197 40 288 0 248 b 89 108 0 148 40 108 z'\n },\n 'repeat4Bars': {\n 'x_min': 0,\n 'x_max': 1232,\n 'y_min': -250,\n 'y_max': 279,\n 'ha': 529,\n 'o': 'm 331 -350 b 343 -360 331 -356 336 -360 l 485 -360 b 516 -340 498 -360 508 -348 l 1090 380 b 1097 395 1094 386 1097 390 b 1089 402 1097 399 1094 402 l 936 402 b 910 380 927 402 920 393 l 336 -340 b 331 -350 333 -343 331 -347 z m 1008 -350 b 1020 -360 1008 -356 1012 -360 l 1162 -360 b 1192 -340 1175 -360 1185 -348 l 1767 380 b 1774 395 1771 386 1774 390 b 1765 402 1774 399 1771 402 l 1613 402 b 1587 380 1604 402 1597 393 l 1012 -340 b 1008 -350 1009 -343 1008 -347 z m 688 -360 l 831 -360 b 861 -340 844 -360 854 -348 l 1436 380 b 1443 395 1440 386 1443 390 b 1434 402 1443 399 1440 402 l 1282 402 b 1256 380 1273 402 1266 393 l 681 -340 b 677 -350 678 -343 677 -347 b 688 -360 677 -356 681 -360 z m 0 -350 b 12 -360 0 -356 4 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 z m 1683 -251 b 1774 -161 1734 -251 1774 -210 b 1683 -71 1774 -111 1734 -71 b 1594 -161 1634 -71 1594 -111 b 1683 -251 1594 -210 1634 -251 z m 0 197 b 89 108 0 148 40 108 b 180 197 140 108 180 148 b 89 288 180 248 140 288 b 0 197 40 288 0 248 z'\n },\n 'repeatBarSlash': {\n 'x_min': 0,\n 'x_max': 532,\n 'y_min': -250,\n 'y_max': 279,\n 'ha': 529,\n 'o': 'm 12 -360 l 154 -360 b 184 -340 167 -360 177 -348 l 759 380 b 766 395 763 386 766 390 b 757 402 766 399 763 402 l 605 402 b 579 380 596 402 589 393 l 4 -340 b 0 -350 1 -343 0 -347 b 12 -360 0 -356 4 -360 z'\n }\n },\n 'fontFamily': 'Bravura',\n 'resolution': 1000,\n 'generatedOn': '2020-04-13T11:57:57.152Z'\n};\n","export const GonvilleMetrics = {\n name: 'Gonville',\n smufl: false,\n stave: {\n padding: 12,\n },\n\n clef: {\n 'default': {\n point: 40,\n width: 26\n },\n 'small': {\n point: 32,\n width: 20,\n },\n\n annotations: {\n '8va': {\n smuflCode: 'timeSig8',\n default: {\n point: 20,\n treble: {\n line: -1.2,\n shiftX: 11,\n },\n },\n small: {\n point: 18,\n treble: {\n line: -0.4,\n shiftX: 8,\n },\n }\n },\n '8vb': {\n smuflCode: 'timeSig8',\n default: {\n point: 20,\n treble: {\n line: 6.3,\n shiftX: 10,\n },\n bass: {\n line: 4,\n shiftX: 1,\n }\n },\n small: {\n point: 18,\n treble: {\n line: 5.8,\n shiftX: 6,\n },\n bass: {\n line: 3.5,\n shiftX: 0.5,\n }\n }\n }\n },\n\n // May not need these anymore\n lineCount: {\n '8': { point: 55, shiftY: 14 },\n '7': { point: 47, shiftY: 8 },\n '6': { point: 40, shiftY: 1 },\n '5': { point: 30, shiftY: -6 },\n '4': { point: 23, shiftY: -12 },\n }\n },\n\n pedalMarking: {\n up: {\n point: 40\n },\n down: {\n point: 40\n }\n },\n\n tremolo: {\n default: {\n point: 40,\n spacing: 4,\n offsetYStemUp: -9,\n offsetYStemDown: -21,\n offsetXStemUp: 6,\n offsetXStemDown: -2,\n },\n grace: {\n point: 30,\n spacing: 4,\n offsetYStemUp: -9,\n offsetYStemDown: -21,\n offsetXStemUp: 6,\n offsetXStemDown: -2,\n }\n },\n\n // These are for numeric digits, such as in time signatures\n digits: {\n point: 40,\n tupletPoint: 28,\n },\n\n stem: {\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n }\n }\n },\n\n glyphs: {\n textNote: {\n point: 40,\n default: {\n },\n ornamentTrill: {\n shiftX: -5,\n shiftY: 4,\n }\n },\n noteHead: {\n custom: {\n 'noteheadDiamondWholeStemUp': {\n shiftX: -6,\n },\n 'noteheadCircleXStemUp': {\n shiftX: -1.5,\n },\n 'noteheadXWholeStemUp': {\n shiftX: -5,\n },\n 'noteheadTriangleUpWholeStemUp': {\n shiftX: -6,\n },\n },\n },\n }\n};\n","export const GonvilleFont = {\n 'glyphs': {\n 'bracketTop': {\n 'x_min': 0,\n 'x_max': 559.421875,\n 'ha': 571,\n 'o': 'm 544 204 b 548 204 545 204 547 204 b 559 194 555 204 559 199 b 559 190 559 192 559 191 b 530 156 559 188 556 184 b 462 86 510 134 481 104 b 453 76 458 81 454 77 l 446 70 l 441 65 b 434 59 439 63 436 61 l 427 54 b 409 37 426 51 416 44 b 392 23 398 29 394 26 b 387 19 389 22 387 20 b 379 13 386 19 383 16 l 371 8 l 367 5 l 359 -1 l 337 -16 b 285 -48 319 -29 298 -41 l 279 -52 b 186 -95 255 -66 210 -87 l 175 -99 b 23 -129 127 -117 68 -129 b 17 -129 20 -129 19 -129 b 1 -123 2 -129 2 -129 b 0 -49 0 -122 0 -83 b 0 4 0 -22 0 1 b 27 11 2 9 4 9 b 185 31 78 12 145 20 b 198 34 186 31 193 33 b 314 73 234 44 277 58 b 349 88 328 79 340 84 b 353 90 352 90 353 90 b 363 94 353 90 357 93 b 371 98 367 97 371 98 b 428 129 372 98 413 120 b 461 148 441 136 454 144 b 468 151 464 149 466 151 b 472 154 469 152 470 154 b 481 161 473 155 477 158 b 525 190 490 166 518 186 l 534 197 b 540 201 536 198 539 199 b 544 204 541 202 544 204 '\n },\n 'bracketBottom': {\n 'x_min': 0,\n 'x_max': 559.421875,\n 'ha': 571,\n 'o': 'm 5 127 b 14 127 6 127 9 127 b 51 126 25 127 43 127 b 175 98 93 122 138 112 l 186 94 b 279 51 210 86 255 65 b 285 47 280 51 283 48 b 319 27 291 44 311 31 l 326 22 b 359 0 332 19 352 4 l 367 -6 b 371 -9 368 -6 370 -8 l 379 -15 b 387 -22 383 -18 386 -20 l 398 -30 l 411 -40 l 417 -47 l 427 -55 l 434 -61 b 441 -66 436 -62 439 -65 l 446 -72 l 453 -77 l 462 -87 b 558 -188 490 -113 549 -176 b 559 -195 559 -191 559 -194 b 548 -205 559 -201 555 -205 b 541 -204 547 -205 544 -205 b 534 -198 539 -201 536 -199 l 525 -191 b 481 -162 518 -187 490 -167 b 472 -155 477 -159 472 -156 b 468 -152 470 -155 469 -154 b 461 -149 466 -152 464 -151 b 428 -130 454 -145 441 -137 b 371 -99 413 -122 372 -99 b 363 -95 371 -99 367 -98 b 353 -91 357 -94 353 -91 b 348 -90 353 -91 352 -91 b 332 -81 343 -87 341 -86 b 27 -12 230 -37 127 -13 b 0 -5 4 -11 2 -11 b 0 58 0 -2 0 27 b 0 122 0 88 0 120 b 5 127 1 124 4 126 '\n },\n 'barlineTick': {\n 'x_min': -80.3125,\n 'x_max': 78.9375,\n 'ha': 81,\n 'o': 'm 63 191 b 69 192 65 192 66 192 b 77 188 72 192 76 191 b 78 183 78 187 78 186 b 74 158 78 179 77 172 l 66 115 b 9 -161 49 30 10 -158 b -10 -187 6 -172 -1 -181 b -34 -194 -17 -191 -25 -194 b -80 -147 -58 -194 -80 -174 b -80 -141 -80 -144 -80 -142 b 9 70 -80 -134 -73 -117 l 49 163 b 63 191 59 188 61 190 '\n },\n 'breathMarkTick': {\n 'x_min': -80.3125,\n 'x_max': 78.9375,\n 'ha': 81,\n 'o': 'm 63 191 b 69 192 65 192 66 192 b 77 188 72 192 76 191 b 78 183 78 187 78 186 b 74 158 78 179 77 172 l 66 115 b 9 -161 49 30 10 -158 b -10 -187 6 -172 -1 -181 b -34 -194 -17 -191 -25 -194 b -80 -147 -58 -194 -80 -174 b -80 -141 -80 -144 -80 -142 b 9 70 -80 -134 -73 -117 l 49 163 b 63 191 59 188 61 190 '\n },\n 'segno': {\n 'x_min': -330.75,\n 'x_max': 329.390625,\n 'ha': 336,\n 'o': 'm -133 483 b -117 484 -127 484 -122 484 b 31 373 -51 484 9 440 b 35 348 34 365 35 356 b -25 285 35 313 10 285 b -87 331 -55 285 -76 302 b -167 402 -100 376 -133 402 b -191 398 -175 402 -183 401 b -227 341 -215 388 -227 369 b -225 320 -227 334 -227 327 b -13 74 -209 230 -125 133 b 6 65 -4 70 5 66 l 9 63 l 10 65 b 117 231 12 68 40 112 l 189 341 l 242 424 b 268 460 262 456 264 458 b 283 464 273 463 277 464 b 308 438 296 464 308 453 l 308 437 b 287 396 308 430 308 428 l 95 98 l 59 43 l 58 41 l 65 37 b 253 -156 151 -8 217 -77 b 281 -285 272 -199 281 -244 b 148 -481 281 -381 231 -463 b 115 -485 137 -484 126 -485 b -32 -376 51 -485 -9 -442 b -36 -349 -35 -366 -36 -358 b 25 -287 -36 -315 -12 -287 b 85 -333 54 -287 74 -302 b 166 -403 99 -377 133 -403 b 190 -399 174 -403 182 -402 b 225 -342 215 -390 225 -370 b 224 -322 225 -335 225 -328 b 12 -76 208 -231 125 -134 b -8 -66 2 -72 -6 -68 l -10 -65 l -12 -66 b -118 -231 -13 -68 -42 -113 l -190 -342 l -243 -426 b -269 -462 -264 -458 -265 -458 b -284 -466 -274 -464 -279 -466 b -310 -440 -298 -466 -310 -455 l -310 -438 b -288 -398 -310 -430 -308 -430 l -96 -99 l -59 -44 l -59 -43 l -66 -38 b -281 284 -198 33 -281 158 l -281 284 b -133 483 -281 392 -220 474 m 254 177 b 266 179 258 177 262 179 b 319 149 287 179 307 167 b 329 115 326 140 329 127 b 319 79 329 102 326 90 b 268 51 307 61 287 51 b 221 72 250 51 234 58 b 205 115 210 84 205 99 b 254 177 205 142 223 170 m -281 -54 b -269 -52 -277 -52 -273 -52 b -223 -73 -253 -52 -235 -59 b -206 -116 -212 -84 -206 -101 b -216 -151 -206 -129 -209 -141 b -269 -179 -228 -170 -249 -179 b -314 -159 -285 -179 -302 -173 b -330 -116 -325 -147 -330 -131 b -281 -54 -330 -88 -313 -61 '\n },\n 'coda': {\n 'x_min': -311.6875,\n 'x_max': 310.328125,\n 'ha': 317,\n 'o': 'm -9 388 b -2 390 -8 390 -5 390 b 5 388 1 390 4 390 b 19 378 10 387 16 383 b 23 333 23 371 23 371 b 24 298 23 299 24 298 b 81 276 34 298 65 285 b 213 91 145 240 190 177 b 224 24 217 76 224 36 b 257 24 224 24 235 24 b 299 19 292 24 292 24 b 310 -1 306 15 310 6 b 299 -23 310 -11 306 -19 b 257 -27 292 -27 292 -27 b 224 -29 235 -27 224 -29 b 213 -95 224 -40 217 -80 b 81 -280 190 -181 145 -244 b 24 -301 65 -290 34 -301 b 23 -335 24 -301 23 -303 l 23 -340 b 17 -381 23 -374 23 -374 b -1 -391 13 -388 5 -391 b -21 -381 -9 -391 -17 -388 b -27 -340 -27 -374 -27 -374 l -27 -335 b -28 -301 -27 -303 -27 -301 b -85 -280 -38 -301 -69 -290 b -217 -95 -149 -244 -194 -181 b -228 -29 -221 -80 -228 -40 b -259 -27 -228 -29 -238 -27 b -300 -23 -294 -27 -294 -27 b -311 -2 -307 -19 -311 -11 b -294 23 -311 8 -304 19 b -259 24 -291 23 -284 24 b -228 24 -239 24 -228 24 b -217 91 -228 36 -221 76 b -85 276 -194 177 -149 240 b -28 298 -69 285 -38 298 b -27 333 -27 298 -27 299 b -27 371 -27 362 -27 369 b -9 388 -24 378 -17 385 m -27 136 b -28 247 -27 197 -28 247 b -61 216 -31 247 -53 226 b -123 33 -95 172 -121 98 l -125 24 l -76 24 l -27 24 l -27 136 m 29 242 b 24 247 27 245 24 247 b 23 136 24 247 23 197 l 23 24 l 72 24 l 121 24 l 119 33 b 29 242 115 116 77 206 m -27 -140 l -27 -27 l -76 -27 l -125 -27 l -123 -36 b -61 -220 -121 -102 -95 -176 b -28 -251 -53 -230 -31 -251 b -27 -140 -28 -251 -27 -201 m 119 -36 l 121 -27 l 72 -27 l 23 -27 l 23 -140 b 24 -251 23 -201 24 -251 b 57 -220 27 -251 49 -230 b 119 -36 91 -176 117 -102 '\n },\n 'gClef': {\n 'x_min': -1.359375,\n 'x_max': 847.96875,\n 'ha': 865,\n 'o': 'm 488 1499 b 495 1500 490 1500 492 1500 b 541 1465 507 1500 521 1490 b 679 1078 622 1372 679 1210 b 677 1050 679 1068 677 1060 b 477 642 668 893 604 764 l 443 609 l 431 596 l 431 592 l 438 562 l 449 508 l 460 458 b 481 355 475 390 481 355 b 481 355 481 355 481 355 b 490 356 481 355 485 355 b 528 358 495 356 511 358 b 558 356 540 358 552 356 b 839 95 699 338 808 237 b 847 22 845 72 847 47 b 631 -303 847 -113 766 -242 b 620 -309 623 -308 620 -309 l 620 -310 b 631 -359 620 -310 626 -333 l 646 -435 l 660 -496 b 672 -588 668 -535 672 -563 b 664 -653 672 -610 669 -630 b 383 -875 630 -792 509 -875 b 201 -810 321 -875 257 -855 b 129 -680 151 -768 129 -730 b 274 -530 129 -592 200 -530 b 351 -553 300 -530 326 -538 b 412 -669 393 -582 412 -626 b 287 -805 412 -735 366 -800 l 279 -805 l 285 -809 b 383 -830 318 -823 351 -830 b 586 -718 464 -830 540 -789 b 626 -584 612 -678 626 -631 b 619 -528 626 -566 623 -548 b 612 -495 619 -526 616 -510 b 577 -324 590 -387 577 -324 b 577 -324 577 -324 577 -324 b 568 -326 575 -324 571 -324 b 528 -334 558 -328 537 -333 b 465 -338 506 -337 485 -338 b 24 -11 269 -338 87 -206 b -1 145 8 41 -1 93 b 96 442 -1 249 32 351 b 322 714 166 541 236 626 l 352 745 l 345 782 l 332 843 l 315 921 b 303 984 310 950 304 978 b 295 1082 298 1017 295 1049 b 413 1426 295 1208 336 1329 b 488 1499 436 1456 477 1496 m 549 1301 b 541 1301 547 1301 544 1301 b 411 1207 500 1301 447 1263 b 355 1004 374 1152 355 1079 b 359 942 355 984 356 963 b 371 881 362 927 363 917 l 385 818 b 392 782 389 799 392 784 l 392 782 b 434 828 393 782 424 816 b 607 1165 534 941 594 1060 b 608 1193 608 1175 608 1183 b 597 1270 608 1224 604 1254 b 549 1301 589 1286 571 1299 m 398 528 b 393 555 396 542 393 553 b 392 555 393 555 393 555 b 317 470 390 555 347 505 b 190 298 266 408 212 334 b 127 70 148 227 127 148 b 155 -77 127 19 137 -30 b 468 -303 209 -216 333 -303 b 519 -299 484 -303 502 -302 b 568 -284 541 -295 568 -287 l 568 -284 b 563 -263 568 -284 566 -274 l 534 -120 l 511 -13 l 496 61 l 480 133 b 469 187 472 176 469 187 b 468 188 469 187 469 188 b 416 162 462 188 430 172 b 337 13 364 126 337 69 b 413 -124 337 -40 363 -93 b 428 -144 424 -131 428 -137 b 428 -149 428 -145 428 -148 b 409 -166 426 -161 419 -166 b 394 -162 405 -166 400 -165 b 240 77 302 -122 240 -27 l 240 77 b 430 342 240 197 315 301 l 436 344 l 426 394 l 398 528 m 548 194 b 526 195 540 195 532 195 b 519 195 524 195 521 195 l 514 195 l 518 177 l 539 79 l 552 15 l 566 -48 l 594 -187 l 605 -240 b 612 -266 609 -254 611 -266 b 612 -266 612 -266 612 -266 b 641 -248 613 -266 630 -256 b 744 -98 692 -212 730 -156 b 751 -40 749 -79 751 -59 b 548 194 751 76 665 181 '\n },\n 'cClef': {\n 'x_min': 0,\n 'x_max': 873.828125,\n 'ha': 892,\n 'o': 'm 0 0 l 0 703 l 81 703 l 164 703 l 164 0 l 164 -705 l 81 -705 l 0 -705 l 0 0 m 225 0 l 225 703 l 246 703 l 268 703 l 268 366 l 268 30 l 274 36 b 314 79 284 44 302 63 b 413 302 357 137 392 213 b 432 327 419 324 421 327 b 449 306 443 327 447 322 b 611 115 457 195 529 115 b 651 122 624 115 638 117 b 728 316 705 140 724 188 b 729 388 728 342 729 366 b 671 635 729 533 711 602 b 581 662 649 652 616 662 b 477 637 545 662 510 653 l 475 635 l 477 634 b 503 627 488 632 495 631 b 545 556 532 612 545 584 b 491 480 545 524 526 491 b 465 474 481 476 473 474 b 379 563 417 474 379 516 b 389 602 379 576 382 588 b 541 691 409 641 479 681 b 582 694 555 692 568 694 b 865 462 714 694 834 598 b 873 392 871 440 873 416 b 865 317 873 367 871 341 b 639 84 839 194 748 101 b 612 83 630 83 620 83 b 511 116 577 83 543 94 b 504 120 509 119 506 120 b 504 120 504 120 504 120 b 469 59 504 120 488 93 l 432 -1 l 469 -61 b 504 -122 488 -94 504 -122 b 504 -122 504 -122 504 -122 b 511 -117 506 -122 509 -120 b 612 -84 543 -95 577 -84 b 665 -91 630 -84 647 -87 b 869 -338 771 -122 850 -216 b 873 -392 872 -356 873 -374 b 798 -595 873 -469 847 -539 b 581 -695 741 -662 660 -695 b 406 -626 517 -695 454 -671 b 381 -563 389 -607 381 -585 b 465 -477 381 -519 413 -477 b 545 -559 514 -477 545 -519 b 503 -628 545 -587 532 -613 b 477 -635 495 -632 488 -634 l 475 -637 l 477 -638 b 581 -663 510 -655 545 -663 b 671 -637 616 -663 649 -653 b 729 -391 711 -603 729 -534 b 728 -317 729 -367 728 -344 b 623 -117 722 -173 698 -124 b 611 -116 619 -116 615 -116 b 449 -308 528 -116 457 -198 b 432 -328 447 -323 443 -328 b 413 -303 421 -328 419 -326 b 314 -80 392 -215 357 -138 b 274 -37 302 -65 284 -45 l 268 -31 l 268 -367 l 268 -705 l 246 -705 l 225 -705 l 225 0 '\n },\n 'fClef': {\n 'x_min': -1.359375,\n 'x_max': 899.703125,\n 'ha': 918,\n 'o': 'm 307 349 b 332 351 315 351 323 351 b 443 340 367 351 408 347 b 741 47 607 306 720 195 b 744 0 743 31 744 16 b 660 -303 744 -90 713 -206 b 28 -755 534 -531 304 -695 b 14 -756 23 -755 19 -756 b -1 -741 4 -756 -1 -750 b 21 -720 -1 -731 1 -728 b 567 -56 337 -601 548 -344 b 568 -11 568 -41 568 -24 b 442 285 568 129 525 233 b 325 319 406 308 367 319 b 93 177 232 319 137 266 b 84 154 91 170 84 155 b 84 154 84 154 84 154 b 88 156 84 154 85 155 b 159 177 110 170 134 177 b 257 134 194 177 231 162 b 294 41 281 108 294 73 b 171 -97 294 -24 246 -90 b 156 -98 166 -97 161 -98 b 6 74 73 -98 6 -22 b 6 80 6 76 6 79 b 307 349 10 223 141 340 m 839 215 b 845 216 841 216 842 216 b 862 213 852 216 860 215 b 899 163 887 206 899 184 b 872 117 899 145 890 127 b 847 111 865 112 856 111 b 808 130 833 111 818 117 b 796 162 800 140 796 151 b 839 215 796 187 812 212 m 839 -112 b 845 -112 841 -112 842 -112 b 862 -115 852 -112 860 -113 b 899 -165 887 -122 899 -144 b 872 -210 899 -183 890 -201 b 847 -217 865 -215 856 -217 b 808 -198 833 -217 818 -210 b 796 -165 800 -188 796 -177 b 839 -112 796 -140 812 -116 '\n },\n 'unpitchedPercussionClef1': {\n 'x_min': 0,\n 'x_max': 464.140625,\n 'ha': 474,\n 'o': 'm 0 0 l 0 347 l 76 347 l 153 347 l 153 0 l 153 -348 l 76 -348 l 0 -348 l 0 0 m 308 -1 l 308 347 l 386 347 l 464 347 l 464 -1 l 464 -348 l 386 -348 l 308 -348 l 308 -1 '\n },\n '6stringTabClef': {\n 'x_min': -1.359375,\n 'x_max': 680.5625,\n 'ha': 694,\n 'o': 'm 597 1042 b 604 1042 600 1042 602 1042 b 642 1002 627 1042 642 1022 b 619 966 642 988 635 974 b 439 927 574 942 503 927 l 426 927 l 426 921 b 430 838 428 893 430 866 b 345 480 430 696 398 560 b 179 391 307 423 249 391 b 156 392 171 391 164 392 b 138 394 149 394 142 394 b 103 434 115 396 103 416 b 129 471 103 451 111 466 b 141 474 133 473 137 474 b 172 459 153 474 164 469 b 181 455 175 456 176 455 b 187 456 182 455 185 455 b 253 520 212 460 234 483 b 315 836 294 605 315 714 b 311 928 315 867 314 898 b 302 945 310 943 311 942 b 245 953 283 950 262 953 b 130 891 193 953 149 931 b 84 860 119 870 102 860 b 36 905 61 860 39 877 b 36 910 36 907 36 909 b 80 970 36 931 50 949 b 249 1017 125 1000 187 1017 b 322 1009 273 1017 299 1014 l 341 1003 b 436 991 372 995 406 991 b 577 1031 495 991 545 1004 b 597 1042 583 1038 590 1041 m 416 360 b 424 360 419 360 421 360 b 481 309 454 360 479 338 b 503 145 484 280 495 199 b 585 -185 525 16 555 -106 b 630 -245 596 -213 613 -237 l 634 -247 l 638 -245 b 647 -244 641 -245 645 -244 b 680 -278 666 -244 680 -262 b 664 -308 680 -290 675 -301 b 638 -312 658 -310 650 -312 b 613 -309 631 -312 623 -310 b 477 -201 555 -303 502 -260 b 417 -2 460 -159 434 -72 b 416 5 417 1 416 5 b 416 5 416 5 416 5 b 411 -5 415 5 413 0 b 359 -97 397 -33 377 -70 b 353 -106 355 -102 353 -105 b 359 -112 353 -108 355 -109 b 409 -130 375 -123 390 -129 b 426 -134 420 -130 421 -131 b 431 -147 428 -137 431 -141 b 420 -162 431 -152 427 -159 b 382 -169 409 -166 396 -169 b 323 -155 363 -169 341 -165 l 317 -152 l 314 -155 b 62 -303 240 -240 148 -295 b 36 -305 55 -305 44 -305 b 23 -303 29 -305 24 -305 b -1 -273 6 -299 -1 -287 b 31 -240 -1 -256 10 -240 b 36 -240 32 -240 34 -240 b 42 -241 38 -241 39 -241 b 134 -204 63 -241 99 -226 b 367 288 265 -115 357 81 b 375 330 368 313 370 320 b 416 360 383 347 400 358 m 360 -359 b 379 -359 363 -359 371 -359 b 424 -360 396 -359 416 -359 b 646 -502 536 -373 624 -430 b 649 -527 649 -510 649 -519 b 530 -673 649 -578 604 -635 l 521 -677 l 529 -681 b 653 -811 592 -714 637 -762 b 660 -853 658 -827 660 -839 b 645 -911 660 -873 656 -892 b 426 -1021 608 -981 519 -1021 b 283 -989 377 -1021 328 -1011 b 235 -949 249 -972 239 -964 b 234 -936 234 -946 234 -941 b 234 -928 234 -934 234 -931 l 235 -925 l 234 -927 l 225 -934 b 87 -982 186 -966 138 -982 b 80 -982 85 -982 83 -982 b 55 -981 70 -981 58 -981 b 17 -943 32 -981 17 -964 b 54 -904 17 -921 35 -904 b 78 -914 62 -904 72 -909 l 83 -918 l 88 -918 b 190 -831 122 -918 166 -881 b 269 -506 242 -727 269 -612 b 268 -462 269 -492 269 -477 b 266 -449 266 -458 266 -452 b 265 -444 266 -445 266 -444 b 257 -446 264 -444 261 -445 b 132 -545 196 -470 152 -505 b 88 -573 122 -563 104 -573 b 39 -523 63 -573 39 -553 b 63 -476 39 -505 44 -494 b 360 -359 136 -408 235 -369 m 419 -424 b 393 -423 411 -423 406 -423 l 375 -423 l 377 -426 b 379 -439 377 -427 378 -434 b 383 -510 382 -463 383 -487 b 314 -811 383 -609 360 -710 b 266 -893 296 -850 285 -870 b 264 -898 265 -896 264 -898 l 264 -898 b 264 -898 264 -898 264 -898 b 268 -898 264 -898 266 -898 b 273 -898 270 -898 272 -898 b 300 -909 283 -898 291 -900 b 426 -957 340 -941 385 -957 b 476 -949 443 -957 460 -954 b 547 -853 522 -931 547 -893 b 485 -745 547 -816 526 -775 b 397 -707 460 -727 432 -714 b 366 -675 375 -703 366 -692 b 396 -642 366 -657 377 -645 b 530 -557 455 -637 511 -601 b 536 -527 534 -548 536 -537 b 419 -424 536 -480 490 -437 '\n },\n 'timeSig0': {\n 'x_min': 0,\n 'x_max': 514.5,\n 'ha': 525,\n 'o': 'm 236 648 b 246 648 238 648 242 648 b 288 646 261 648 283 648 b 472 513 364 634 428 587 b 514 347 502 464 514 413 b 462 163 514 272 499 217 b 257 44 409 83 333 44 b 50 163 181 44 103 83 b 0 347 14 217 0 272 b 40 513 0 413 12 464 b 236 648 87 591 155 638 m 277 614 b 253 616 273 616 261 616 b 242 616 247 616 243 616 b 170 499 193 609 181 589 b 159 348 163 446 159 398 b 166 222 159 308 161 266 b 201 91 174 138 183 106 b 257 76 215 81 235 76 b 311 91 277 76 299 81 b 347 222 330 106 338 138 b 353 348 352 266 353 308 b 344 499 353 398 351 446 b 277 614 333 587 322 606 m 257 -1 l 258 -1 l 255 -1 l 257 -1 m 257 673 l 258 673 l 255 673 l 257 673 '\n },\n 'timeSig1': {\n 'x_min': -1.359375,\n 'x_max': 344.359375,\n 'ha': 351,\n 'o': 'm 126 637 l 129 638 l 198 638 l 266 638 l 269 635 b 274 631 272 634 273 632 l 277 627 l 277 395 b 279 156 277 230 277 161 b 329 88 281 123 295 106 b 344 69 341 81 344 79 b 337 55 344 62 343 59 l 333 54 l 197 54 l 61 54 l 58 55 b 50 69 53 59 50 62 b 65 88 50 79 53 81 b 80 97 72 91 74 93 b 117 156 103 113 112 129 b 117 345 117 161 117 222 l 117 528 l 100 503 l 38 406 b 14 383 24 384 23 383 b -1 398 5 383 -1 390 b 4 415 -1 403 1 409 b 16 437 5 416 10 426 l 72 539 l 100 596 b 121 632 119 631 119 631 b 126 637 122 634 125 635 m 171 -1 l 172 -1 l 170 -1 l 171 -1 m 171 673 l 172 673 l 170 673 l 171 673 '\n },\n 'timeSig2': {\n 'x_min': -1.359375,\n 'x_max': 458.6875,\n 'ha': 468,\n 'o': 'm 197 648 b 216 648 201 648 208 648 b 258 646 232 648 253 648 b 419 546 333 637 393 599 b 432 489 428 528 432 509 b 356 342 432 440 405 384 b 235 278 322 313 288 295 b 69 170 166 256 107 217 b 69 169 69 170 69 169 b 69 169 69 169 69 169 b 74 173 69 169 72 170 b 209 222 112 204 163 222 b 310 195 247 222 274 215 b 371 179 332 184 352 179 b 396 181 379 179 387 179 b 428 202 409 184 423 194 b 442 212 431 209 436 212 b 458 197 450 212 458 206 b 441 148 458 190 449 165 b 299 44 409 84 353 44 b 288 45 295 44 292 44 b 250 61 274 45 268 49 b 122 99 212 86 164 99 b 73 91 104 99 88 97 b 28 63 53 84 34 72 b 14 54 25 56 20 54 b 1 62 9 54 4 56 l -1 65 l -1 79 b 0 99 -1 91 0 95 b 2 113 1 102 2 108 b 164 309 20 197 81 272 b 285 470 232 341 277 398 b 287 487 287 476 287 481 b 171 595 287 551 239 595 b 155 595 166 595 160 595 b 142 592 145 594 142 594 b 145 589 142 592 142 591 b 179 527 168 576 179 551 b 132 455 179 496 163 467 b 104 451 122 452 112 451 b 27 530 62 451 27 487 b 29 555 27 538 27 546 b 197 648 44 601 115 639 m 228 -1 l 230 -1 l 227 -1 l 228 -1 m 228 673 l 230 673 l 227 673 l 228 673 '\n },\n 'timeSig3': {\n 'x_min': -1.359375,\n 'x_max': 409.6875,\n 'ha': 418,\n 'o': 'm 174 648 b 191 648 176 648 183 648 b 225 648 204 648 220 648 b 402 523 317 638 389 588 b 404 503 404 517 404 510 b 402 484 404 495 404 488 b 264 373 389 437 334 394 b 257 370 259 371 257 371 b 257 370 257 370 257 370 b 264 369 258 370 261 369 b 409 202 359 334 409 267 b 318 72 409 152 381 104 b 200 43 281 52 240 43 b 23 113 134 43 69 68 b 0 169 6 129 0 149 b 77 249 0 210 29 249 l 77 249 b 152 174 125 249 152 212 b 103 102 152 145 137 116 b 103 102 103 102 103 102 b 147 94 103 101 132 95 b 153 94 149 94 151 94 b 265 206 219 94 265 141 b 264 226 265 213 265 219 b 147 355 253 299 204 353 b 126 371 133 356 126 362 b 147 388 126 383 132 388 b 254 474 196 391 238 424 b 259 502 258 484 259 494 b 182 592 259 544 228 582 b 156 595 175 595 166 595 b 115 592 142 595 129 594 l 111 591 l 115 588 b 152 524 141 574 152 549 b 92 449 152 491 130 458 b 76 448 87 448 81 448 b -1 530 32 448 -1 488 b 20 581 -1 548 5 566 b 174 648 55 619 108 641 m 204 -1 l 205 -1 l 202 -1 l 204 -1 m 204 673 l 205 673 l 202 673 l 204 673 '\n },\n 'timeSig4': {\n 'x_min': 0,\n 'x_max': 468.21875,\n 'ha': 478,\n 'o': 'm 174 637 b 232 638 175 638 189 638 b 277 638 245 638 259 638 l 378 638 l 381 635 b 389 623 386 632 389 627 b 382 609 389 617 386 613 b 366 589 381 606 372 598 l 313 528 l 245 451 l 209 410 l 155 348 l 84 267 b 59 240 72 252 59 240 b 59 240 59 240 59 240 b 151 238 59 238 68 238 l 242 238 l 242 303 b 243 371 242 369 242 370 b 289 426 245 374 254 385 l 303 441 l 317 456 l 338 483 l 360 506 l 371 520 b 386 527 375 526 381 527 b 400 519 392 527 397 524 b 401 440 401 516 401 514 b 401 377 401 423 401 402 l 401 238 l 426 238 b 453 237 449 238 450 238 b 465 217 461 234 465 226 b 460 202 465 212 464 206 b 426 197 454 197 453 197 l 401 197 l 401 180 b 451 88 402 129 412 109 b 468 69 465 81 468 79 b 461 55 468 62 466 59 l 458 54 l 321 54 l 185 54 l 182 55 b 175 69 176 59 175 62 b 191 88 175 79 176 81 b 240 180 230 109 240 129 l 240 197 l 125 197 b 73 195 104 195 87 195 b 8 197 10 195 9 197 b 0 212 2 199 0 205 b 0 212 0 212 0 212 b 20 242 0 219 0 219 b 163 610 104 344 163 492 b 174 637 163 628 166 634 m 234 -1 l 235 -1 l 232 -1 l 234 -1 m 234 673 l 235 673 l 232 673 l 234 673 '\n },\n 'timeSig5': {\n 'x_min': 0,\n 'x_max': 409.6875,\n 'ha': 418,\n 'o': 'm 47 637 b 53 638 49 638 50 638 b 69 634 55 638 61 637 b 210 610 114 619 161 610 b 363 634 259 610 311 619 b 382 638 372 637 378 638 b 392 634 386 638 389 637 b 397 623 396 630 397 627 b 393 610 397 620 396 616 b 298 505 368 552 338 520 b 212 494 277 498 246 494 b 65 517 163 494 106 502 b 61 517 62 517 61 517 b 61 517 61 517 61 517 b 51 408 61 517 51 412 b 51 408 51 408 51 408 b 51 408 51 408 51 408 b 61 412 53 408 55 409 b 125 434 80 421 103 430 b 185 441 145 440 166 441 b 409 244 310 441 409 353 b 401 191 409 227 406 209 b 197 43 375 105 287 43 b 159 47 183 43 171 44 b 23 123 112 56 61 86 b 0 180 6 140 0 159 b 76 260 0 220 31 260 b 92 259 81 260 87 259 b 152 183 132 251 152 216 b 100 112 152 152 134 122 b 95 111 98 112 95 111 b 95 111 95 111 95 111 b 129 98 95 109 119 101 b 148 97 136 97 141 97 b 264 235 206 97 261 158 b 265 248 265 240 265 244 b 210 398 265 312 243 373 b 179 408 201 406 194 408 b 174 408 178 408 176 408 b 53 369 130 408 88 394 b 34 359 39 359 38 359 b 17 374 24 359 17 365 b 39 628 17 384 38 625 b 47 637 40 631 43 635 m 204 -1 l 205 -1 l 202 -1 l 204 -1 m 204 673 l 205 673 l 202 673 l 204 673 '\n },\n 'timeSig6': {\n 'x_min': 0,\n 'x_max': 475.03125,\n 'ha': 485,\n 'o': 'm 255 648 b 274 648 259 648 266 648 b 314 646 288 648 307 648 b 450 555 374 637 438 594 b 454 530 453 546 454 538 b 375 451 454 485 416 451 b 328 467 359 451 343 455 b 300 526 310 483 300 503 b 352 598 300 557 319 589 b 356 599 355 598 356 599 b 352 602 356 599 355 601 b 288 616 330 612 308 616 b 210 584 257 616 230 605 b 164 433 189 559 174 508 b 160 374 163 415 160 381 b 160 374 160 374 160 374 b 160 374 160 374 160 374 b 168 377 160 374 164 376 b 258 395 200 390 228 395 b 366 367 294 395 328 387 b 475 223 436 333 475 283 b 472 197 475 215 473 206 b 349 65 462 141 419 95 b 259 43 317 51 288 43 b 167 69 230 43 200 52 b 4 290 80 113 20 195 b 0 349 1 309 0 328 b 20 467 0 391 6 433 b 255 648 58 563 155 637 m 269 363 b 257 363 265 363 261 363 b 210 345 236 363 220 356 b 186 226 196 324 186 272 b 187 198 186 216 186 206 b 213 95 191 151 202 112 b 257 76 221 83 238 76 b 270 77 261 76 266 76 b 321 156 299 81 310 99 b 329 229 326 183 329 206 b 321 301 329 252 326 274 b 269 363 311 342 298 359 m 236 -1 l 238 -1 l 235 -1 l 236 -1 m 236 673 l 238 673 l 235 673 l 236 673 '\n },\n 'timeSig7': {\n 'x_min': 0,\n 'x_max': 442.359375,\n 'ha': 451,\n 'o': 'm 147 648 b 166 649 153 649 160 649 b 313 598 217 649 273 630 b 340 587 323 588 328 587 l 341 587 b 412 628 367 587 390 601 b 427 638 416 635 421 638 b 439 632 431 638 435 637 b 442 623 441 630 442 628 b 430 569 442 616 439 603 b 352 369 408 492 377 410 b 300 259 325 324 313 298 b 273 84 283 205 273 140 b 265 55 273 65 272 59 l 261 54 l 181 54 l 99 54 l 96 55 b 91 61 95 56 92 59 l 89 63 l 89 77 b 147 263 89 133 111 202 b 261 401 176 313 212 355 b 378 541 315 449 349 489 l 382 548 l 375 544 b 240 495 333 512 285 495 b 129 535 198 495 160 509 b 84 560 108 552 95 560 b 76 559 81 560 78 560 b 31 487 59 555 43 530 b 14 470 27 473 24 470 b 1 477 8 470 4 471 l 0 480 l 0 553 l 0 627 l 1 630 b 16 638 4 635 9 638 b 23 635 17 638 20 637 b 49 626 36 626 39 626 b 96 638 59 626 80 630 b 104 639 99 638 102 639 b 117 644 107 641 112 642 b 147 648 125 645 137 648 m 220 -1 l 221 -1 l 219 -1 l 220 -1 m 220 673 l 221 673 l 219 673 l 220 673 '\n },\n 'timeSig8': {\n 'x_min': 0,\n 'x_max': 488.640625,\n 'ha': 499,\n 'o': 'm 217 648 b 245 649 225 648 235 649 b 453 516 343 649 430 595 b 458 478 455 503 458 491 b 412 370 458 440 441 398 b 411 369 412 369 411 369 b 415 365 411 367 412 367 b 488 231 462 331 488 281 b 472 165 488 208 483 186 b 243 43 434 86 338 43 b 63 104 178 43 112 62 b 0 233 20 140 0 186 b 73 365 0 283 24 331 l 77 369 l 72 374 b 29 476 42 406 29 441 b 217 648 29 557 103 635 m 258 605 b 242 606 253 605 247 606 b 157 552 198 606 157 580 b 160 541 157 548 159 544 b 319 413 176 503 242 452 l 337 403 l 338 406 b 359 476 352 428 359 452 b 258 605 359 537 318 595 m 138 326 b 130 330 134 328 130 330 b 130 330 130 330 130 330 b 107 305 127 330 112 313 b 84 231 91 281 84 256 b 243 86 84 156 151 86 b 249 87 245 86 246 87 b 347 156 303 88 347 120 b 344 172 347 162 345 167 b 156 319 325 227 257 281 b 138 326 151 322 144 324 m 243 -1 l 245 -1 l 242 -1 l 243 -1 m 243 673 l 245 673 l 242 673 l 243 673 '\n },\n 'timeSig9': {\n 'x_min': 0,\n 'x_max': 475.03125,\n 'ha': 485,\n 'o': 'm 191 646 b 212 649 198 648 205 649 b 255 644 227 649 243 646 b 458 448 348 616 428 539 b 475 342 469 415 475 378 b 460 244 475 308 469 274 b 193 44 421 124 303 44 b 91 69 157 44 122 51 b 19 161 43 97 19 126 b 21 181 19 167 20 174 b 98 241 32 220 65 241 b 170 186 129 241 160 223 b 172 166 171 179 172 173 b 121 94 172 134 152 102 b 117 93 118 94 117 93 b 121 90 117 93 118 91 b 185 76 142 80 164 76 b 270 119 220 76 251 91 b 308 259 287 145 300 194 b 313 317 310 277 313 310 b 313 317 313 317 313 317 b 313 317 313 317 313 317 b 304 315 313 317 308 316 b 216 295 273 302 245 295 b 145 308 193 295 170 299 b 19 398 88 327 42 360 b 0 469 5 420 0 444 b 24 551 0 496 8 526 b 191 646 54 596 125 637 m 227 614 b 215 616 224 616 220 616 b 202 614 210 616 206 616 b 152 535 174 610 163 592 b 144 463 147 509 144 485 b 152 391 144 440 147 417 b 216 328 163 344 179 328 b 280 391 253 328 269 344 b 288 463 285 417 288 440 b 280 535 288 485 285 509 b 227 614 269 594 258 610 m 236 -1 l 238 -1 l 235 -1 l 236 -1 m 236 673 l 238 673 l 235 673 l 236 673 '\n },\n 'timeSigCommon': {\n 'x_min': -1.359375,\n 'x_max': 556.6875,\n 'ha': 568,\n 'o': 'm 294 322 b 318 323 299 322 308 323 b 360 320 334 323 352 322 b 526 217 430 310 490 273 b 543 166 537 202 543 184 b 447 70 543 117 503 70 b 445 70 447 70 446 70 b 359 159 394 72 359 113 b 368 201 359 173 362 187 b 442 245 382 229 412 245 b 455 244 446 245 451 245 b 460 244 458 244 460 244 b 460 244 460 244 460 244 b 454 248 460 244 458 245 b 325 291 417 276 372 291 b 285 287 313 291 299 290 b 144 -2 183 269 144 190 b 281 -290 144 -208 179 -280 b 304 -291 289 -291 298 -291 b 524 -105 412 -291 506 -212 b 541 -84 526 -88 530 -84 b 556 -101 551 -84 556 -90 b 549 -138 556 -111 553 -122 b 334 -322 521 -237 435 -310 b 302 -324 323 -323 313 -324 b 13 -101 172 -324 54 -234 b -1 -1 4 -68 -1 -34 b 294 322 -1 161 121 303 '\n },\n 'timeSigCutCommon': {\n 'x_min': 0,\n 'x_max': 556.6875,\n 'ha': 568,\n 'o': 'm 289 545 b 298 546 292 545 295 546 b 318 533 306 546 315 541 b 319 428 319 530 319 528 l 319 327 l 334 327 b 526 223 412 326 485 285 b 543 172 537 206 543 190 b 447 76 543 122 503 76 b 445 76 446 76 446 76 b 359 165 394 77 359 119 b 368 205 359 179 362 192 b 441 251 382 233 412 251 b 455 249 446 251 451 251 b 460 248 458 249 460 248 b 460 248 460 248 460 248 b 454 254 460 249 458 251 b 334 295 419 280 378 294 l 319 295 l 319 4 l 319 -287 l 321 -285 b 328 -285 322 -285 325 -285 b 524 -99 424 -277 507 -198 b 541 -79 526 -84 530 -79 b 556 -97 551 -79 556 -84 b 548 -133 556 -105 553 -117 b 334 -317 521 -233 434 -306 b 322 -319 329 -317 323 -317 l 319 -319 l 319 -424 b 319 -471 319 -444 319 -459 b 313 -541 319 -544 318 -535 b 298 -548 308 -545 303 -548 b 279 -534 289 -548 281 -542 b 277 -424 277 -531 277 -530 l 277 -317 l 273 -317 b 13 -95 153 -305 51 -217 b 0 2 4 -62 0 -29 b 182 295 0 126 66 238 b 274 324 210 309 249 320 l 277 324 l 277 427 b 279 533 277 528 277 530 b 289 545 281 538 285 542 m 277 2 b 277 291 277 161 277 291 b 268 288 277 291 273 290 b 144 1 179 265 144 184 b 276 -284 144 -199 175 -267 l 277 -285 l 277 2 '\n },\n 'noteheadDoubleWhole': {\n 'x_min': 0,\n 'x_max': 902.421875,\n 'ha': 921,\n 'o': 'm 17 240 b 24 241 19 241 21 241 b 32 240 28 241 31 241 b 46 229 38 238 43 234 b 50 88 50 223 50 237 b 50 -1 50 63 50 34 b 50 -90 50 -36 50 -65 b 46 -231 50 -238 50 -224 b 25 -242 42 -238 34 -242 b 0 -224 14 -242 4 -235 b 0 2 0 -222 0 -108 b 0 223 0 112 0 220 b 17 240 2 230 9 237 m 110 240 b 118 241 111 241 114 241 b 126 240 121 241 123 241 b 142 223 133 237 140 230 b 144 123 144 220 144 205 b 144 29 144 45 144 29 b 144 29 144 29 144 29 b 393 183 166 106 264 167 b 450 186 412 184 431 186 b 756 29 600 186 732 120 b 756 29 756 29 756 29 b 758 123 758 29 758 45 b 760 227 758 226 758 223 b 784 241 766 237 774 241 b 804 229 792 241 800 237 b 809 88 808 223 809 237 l 809 -1 l 809 -90 b 804 -231 809 -238 808 -224 b 784 -242 800 -238 792 -242 b 762 -231 775 -242 766 -238 b 758 -124 756 -224 758 -231 b 756 -30 758 -47 758 -30 b 756 -30 756 -30 756 -30 b 509 -184 736 -108 637 -169 b 450 -187 488 -187 469 -187 b 144 -30 300 -187 168 -122 b 144 -30 144 -30 144 -30 b 144 -124 144 -30 144 -47 b 140 -231 144 -231 144 -224 b 118 -242 134 -238 126 -242 b 92 -224 107 -242 96 -235 b 92 2 92 -222 92 -108 b 92 223 92 112 92 220 b 110 240 95 230 102 237 m 432 161 b 413 162 426 162 420 162 b 313 41 351 162 313 109 b 347 -73 313 5 323 -34 b 487 -163 385 -133 439 -163 b 578 -97 526 -163 562 -142 b 588 -43 585 -80 588 -62 b 432 161 588 47 518 147 m 868 240 b 876 241 869 241 872 241 b 884 240 879 241 882 241 b 898 229 890 238 894 234 b 902 88 902 223 902 237 l 902 -1 l 902 -90 b 898 -231 902 -238 902 -224 b 876 -242 892 -238 884 -242 b 852 -224 865 -242 854 -235 b 850 2 850 -222 850 -108 b 852 223 850 112 850 220 b 868 240 853 230 860 237 '\n },\n 'noteheadWhole': {\n 'x_min': 0,\n 'x_max': 619.3125,\n 'ha': 632,\n 'o': 'm 274 184 b 307 186 285 186 296 186 b 616 22 465 186 597 116 b 619 -1 617 13 619 5 b 308 -187 619 -104 483 -187 b 0 -1 133 -187 0 -102 b 5 36 0 11 1 23 b 274 184 29 115 141 176 m 289 161 b 272 162 284 162 277 162 b 171 41 209 162 171 108 b 205 -73 171 5 182 -34 b 345 -163 243 -133 298 -163 b 436 -98 385 -163 420 -142 b 446 -43 443 -80 446 -62 b 289 161 446 47 377 147 '\n },\n 'noteheadHalf': {\n 'x_min': 0,\n 'x_max': 428.75,\n 'ha': 438,\n 'o': 'm 262 186 b 273 186 266 186 272 186 b 274 186 273 186 274 186 b 285 186 274 186 280 186 b 428 48 375 181 428 122 b 386 -68 428 12 416 -29 b 155 -187 329 -145 236 -187 b 12 -111 92 -187 38 -162 b 0 -51 4 -91 0 -72 b 262 186 0 58 122 179 m 366 131 b 352 134 362 133 357 134 b 219 81 321 134 269 115 b 47 -111 126 23 50 -62 b 47 -112 47 -111 47 -112 b 77 -136 47 -129 58 -136 b 264 -45 118 -136 194 -101 b 382 109 336 12 382 76 b 366 131 382 120 377 129 '\n },\n 'noteheadBlack': {\n 'x_min': 0,\n 'x_max': 428.75,\n 'ha': 438,\n 'o': 'm 262 186 b 273 186 266 186 272 186 b 274 186 273 186 274 186 b 285 186 274 186 280 186 b 428 48 375 181 428 122 b 386 -68 428 12 416 -29 b 155 -187 329 -145 236 -187 b 12 -111 92 -187 38 -162 b 0 -51 4 -91 0 -72 b 262 186 0 58 122 179 '\n },\n 'noteheadXWhole': {\n 'x_min': 0,\n 'x_max': 598.890625,\n 'ha': 611,\n 'o': 'm 62 181 b 77 183 66 183 72 183 b 91 181 83 183 88 183 b 202 131 100 180 106 177 l 299 87 l 394 131 b 517 183 499 181 502 183 b 519 183 517 183 518 183 b 598 104 567 183 598 144 b 577 49 598 84 592 65 b 518 15 567 38 563 37 b 484 0 499 6 484 0 b 518 -16 484 -1 499 -8 b 577 -51 563 -38 567 -40 b 598 -105 592 -66 598 -86 b 519 -184 598 -145 567 -184 b 517 -184 518 -184 517 -184 b 394 -133 502 -184 499 -183 l 299 -88 l 202 -133 b 81 -184 99 -183 95 -184 b 77 -184 80 -184 78 -184 b 0 -105 29 -184 0 -145 b 20 -51 0 -86 5 -66 b 80 -16 29 -40 34 -38 b 114 -1 98 -8 114 -1 b 80 15 114 0 98 6 b 20 49 34 37 29 38 b 0 104 6 65 0 84 b 62 181 0 140 23 174 m 88 134 b 74 136 85 134 80 136 b 68 134 72 136 69 136 b 46 104 54 130 46 117 b 55 81 46 95 49 88 b 149 34 59 76 53 80 b 224 -1 190 15 224 0 b 144 -38 224 -1 187 -18 b 54 -84 59 -79 58 -79 b 46 -105 49 -90 46 -98 b 76 -137 46 -122 58 -137 b 78 -137 77 -137 77 -137 b 194 -86 87 -137 76 -141 b 298 -36 250 -58 298 -36 b 298 -36 298 -36 298 -36 b 402 -84 299 -36 345 -58 b 518 -137 522 -141 510 -137 b 521 -137 519 -137 519 -137 b 551 -105 539 -137 551 -122 b 541 -83 551 -98 548 -90 b 447 -36 537 -77 544 -81 b 374 -1 406 -16 374 -1 b 447 34 374 0 406 15 b 541 81 544 80 537 76 b 551 104 548 88 551 97 b 521 136 551 120 539 136 b 518 136 519 136 519 136 b 517 136 518 136 517 136 l 517 136 b 402 83 511 136 511 136 b 298 34 345 56 299 34 b 298 34 298 34 298 34 b 194 84 298 34 250 56 b 88 134 137 111 89 133 '\n },\n 'noteheadXHalf': {\n 'x_min': 0,\n 'x_max': 406.96875,\n 'ha': 415,\n 'o': 'm 55 181 b 70 183 61 183 66 183 b 111 170 85 183 99 179 b 160 130 115 167 137 149 l 202 95 l 245 130 b 319 181 299 176 302 179 b 334 183 325 183 330 183 b 406 109 375 183 406 148 b 401 81 406 99 405 91 b 348 24 394 65 390 59 b 318 -1 332 11 318 0 b 348 -26 318 -1 332 -12 b 401 -83 390 -61 394 -66 b 406 -111 405 -93 406 -101 b 334 -184 406 -149 375 -184 b 319 -183 330 -184 325 -184 b 245 -131 302 -180 299 -177 l 202 -97 l 160 -131 b 85 -183 107 -177 103 -180 b 70 -184 80 -184 76 -184 b 0 -111 31 -184 0 -149 b 4 -83 0 -101 1 -93 b 58 -26 10 -66 16 -61 b 88 -1 74 -12 88 -1 b 58 24 88 0 74 11 b 10 69 23 54 17 59 b 0 109 2 81 0 95 b 55 181 0 142 21 173 m 83 133 b 72 136 78 136 76 136 b 57 131 66 136 61 134 b 46 109 49 126 46 117 b 50 93 46 104 47 98 b 107 45 51 91 77 70 b 160 0 137 20 160 0 b 107 -47 160 -1 137 -22 b 50 -94 77 -72 51 -93 b 46 -111 47 -99 46 -105 b 59 -134 46 -120 50 -130 b 72 -137 62 -136 68 -137 b 83 -136 76 -137 80 -136 b 144 -84 84 -134 107 -116 b 202 -36 176 -58 202 -36 b 261 -84 202 -36 230 -58 b 323 -136 299 -116 321 -134 b 334 -137 326 -136 330 -137 b 345 -134 338 -137 343 -136 b 360 -111 355 -130 360 -120 b 355 -94 360 -105 359 -99 b 299 -47 353 -93 329 -72 b 245 0 269 -22 245 -1 b 299 45 245 0 269 20 b 355 93 329 70 353 91 b 360 109 359 98 360 104 b 345 133 360 119 355 129 b 334 136 343 134 338 136 b 323 134 330 136 326 134 b 261 83 321 133 299 115 b 202 34 230 56 202 34 b 144 83 202 34 176 56 b 83 133 106 115 84 133 '\n },\n 'noteheadXBlack': {\n 'x_min': 0,\n 'x_max': 406.96875,\n 'ha': 415,\n 'o': 'm 21 183 b 28 183 24 183 25 183 b 42 181 34 183 39 183 b 127 108 47 179 47 179 b 202 41 168 72 202 41 b 279 108 204 41 238 72 b 357 177 321 145 356 176 b 375 183 363 181 370 183 b 406 151 392 183 406 169 b 404 137 406 147 405 141 b 322 62 401 131 398 129 b 251 0 284 27 251 0 b 322 -63 251 -1 284 -29 b 404 -138 398 -130 401 -133 b 406 -152 405 -142 406 -148 b 375 -184 406 -170 392 -184 b 357 -179 370 -184 363 -183 b 279 -109 356 -177 321 -147 b 202 -43 238 -73 204 -43 b 127 -109 202 -43 168 -73 b 49 -179 85 -147 50 -177 b 31 -184 43 -183 36 -184 b 0 -152 13 -184 0 -170 b 2 -138 0 -148 0 -142 b 83 -63 5 -133 8 -130 b 155 0 122 -29 155 -1 b 83 62 155 0 122 27 b 8 129 43 97 10 127 b 0 151 2 136 0 144 b 21 183 0 165 8 177 '\n },\n 'noteheadCircleX': {\n 'x_min': 0,\n 'x_max': 484.5625,\n 'ha': 494,\n 'o': 'm 228 245 b 239 247 234 247 239 247 b 243 247 240 247 242 247 b 303 238 257 247 287 242 b 484 -2 417 208 484 104 b 412 -177 484 -65 461 -127 b 243 -248 363 -226 303 -248 b 6 -63 138 -248 36 -180 b 0 -1 1 -41 0 -20 b 228 245 0 127 98 240 m 255 181 b 240 183 247 183 245 183 b 232 181 238 183 235 183 b 142 152 200 180 168 170 l 138 149 l 190 97 l 242 44 l 294 97 l 345 149 l 340 152 b 255 181 315 169 284 180 m 147 -54 l 197 -1 l 147 51 l 95 104 l 91 99 b 62 -1 72 70 62 34 b 66 -43 62 -15 63 -29 b 91 -101 72 -63 80 -84 l 95 -106 l 147 -54 m 393 99 b 389 104 390 102 389 104 b 337 51 389 104 366 80 l 285 -1 l 337 -54 l 389 -106 l 393 -101 b 421 -1 412 -72 421 -36 b 393 99 421 34 412 69 m 294 -98 b 242 -45 265 -69 242 -45 b 190 -98 242 -45 219 -69 l 138 -151 l 142 -154 b 242 -184 172 -174 206 -184 b 340 -154 276 -184 311 -174 l 345 -151 l 294 -98 '\n },\n 'noteheadTriangleUpWhole': {\n 'x_min': 0,\n 'x_max': 630.203125,\n 'ha': 643,\n 'o': 'm 308 204 b 314 205 310 205 313 205 b 326 201 319 205 323 204 b 355 154 328 199 338 180 b 401 83 362 142 392 95 l 409 72 b 431 41 412 66 424 49 b 619 -174 498 -51 570 -134 b 630 -192 626 -180 630 -186 b 626 -202 630 -195 628 -199 b 616 -206 623 -205 620 -206 b 552 -188 608 -206 592 -202 b 310 -155 488 -169 392 -155 b 268 -156 295 -155 281 -155 b 77 -188 197 -161 126 -173 b 13 -206 35 -202 20 -206 b 9 -206 12 -206 10 -206 b 0 -191 2 -202 0 -197 b 8 -176 0 -186 2 -180 b 204 49 58 -136 138 -43 l 220 72 l 227 83 b 295 188 245 108 281 166 b 308 204 299 197 304 202 m 315 147 b 314 147 315 147 314 147 b 314 147 314 147 314 147 b 306 129 314 145 310 138 l 296 105 b 281 72 292 97 284 77 l 274 56 b 181 -123 247 -4 212 -72 l 174 -134 l 176 -133 b 314 -123 215 -127 272 -123 b 451 -133 356 -123 413 -127 l 454 -134 l 449 -123 b 353 56 417 -72 381 -4 l 347 72 b 332 105 344 77 336 97 l 322 129 b 315 147 318 138 315 145 '\n },\n 'noteheadTriangleUpHalf': {\n 'x_min': 0,\n 'x_max': 438.28125,\n 'ha': 447,\n 'o': 'm 212 205 b 219 205 213 205 216 205 b 239 183 228 205 231 204 b 421 -163 298 40 363 -83 b 438 -191 434 -180 438 -186 b 436 -197 438 -192 438 -195 b 424 -206 434 -204 431 -206 b 406 -201 420 -206 415 -205 b 216 -156 347 -172 281 -156 b 23 -205 148 -156 80 -173 b 14 -206 20 -206 17 -206 b 0 -191 6 -206 0 -201 b 6 -176 0 -187 1 -183 b 202 192 63 -104 142 45 b 212 205 205 199 208 202 m 264 48 l 249 81 l 243 94 l 242 91 b 89 -126 208 36 137 -66 b 81 -138 85 -133 81 -138 b 81 -138 81 -138 81 -138 b 81 -138 81 -138 81 -138 b 95 -133 81 -138 87 -136 b 280 -94 156 -108 221 -94 b 334 -98 299 -94 317 -95 b 343 -99 338 -99 343 -99 b 343 -99 343 -99 343 -99 b 338 -94 343 -99 341 -97 b 264 48 318 -58 287 1 '\n },\n 'noteheadTriangleUpBlack': {\n 'x_min': -1.359375,\n 'x_max': 436.921875,\n 'ha': 446,\n 'o': 'm 213 205 b 217 205 215 205 216 205 b 234 194 224 205 234 199 b 236 187 234 194 235 190 l 245 167 l 261 129 l 270 106 b 355 -61 294 54 329 -13 b 420 -163 381 -105 402 -138 b 436 -188 435 -184 436 -184 b 436 -191 436 -190 436 -190 b 421 -206 436 -201 431 -206 l 421 -206 l 416 -206 l 405 -201 b 217 -158 347 -172 283 -158 b 31 -201 153 -158 88 -172 l 20 -206 l 14 -206 l 14 -206 b 0 -191 5 -206 0 -201 b -1 -188 0 -190 -1 -190 b 14 -163 -1 -186 0 -184 b 95 -34 36 -136 72 -77 b 166 106 119 8 148 68 l 175 129 l 183 148 l 200 188 b 213 205 205 199 208 202 '\n },\n 'noteheadDiamondWhole': {\n 'x_min': 0,\n 'x_max': 627.46875,\n 'ha': 640,\n 'o': 'm 306 190 b 314 191 308 191 311 191 b 326 184 318 191 322 190 l 336 173 b 510 52 377 127 442 80 b 515 49 513 51 515 49 b 611 16 537 40 579 24 b 627 0 624 13 627 9 b 607 -18 627 -11 624 -13 b 330 -181 490 -49 389 -109 b 314 -192 323 -190 319 -192 b 306 -191 311 -192 308 -192 b 294 -177 302 -188 302 -188 b 257 -140 287 -170 265 -148 b 19 -18 193 -84 114 -44 b 0 0 2 -13 0 -11 b 16 16 0 9 2 13 b 110 49 47 24 89 40 b 117 52 111 49 114 51 b 145 65 126 56 130 58 b 281 163 200 93 245 124 b 300 186 288 170 291 174 b 306 190 300 187 303 188 m 317 137 b 313 142 315 141 314 142 b 308 137 313 142 311 141 b 161 4 276 84 220 33 b 155 0 159 1 155 0 b 163 -4 155 0 159 -2 b 308 -138 220 -34 276 -84 b 313 -142 311 -141 313 -142 b 317 -138 314 -142 315 -141 b 464 -4 351 -84 406 -34 b 470 0 468 -2 470 0 b 464 4 470 0 468 1 b 317 137 406 33 351 84 '\n },\n 'noteheadDiamondHalf': {\n 'x_min': 0,\n 'x_max': 438.28125,\n 'ha': 447,\n 'o': 'm 212 190 b 219 191 213 191 216 191 b 236 176 225 191 228 190 b 419 18 277 105 341 49 b 436 5 431 13 434 11 b 438 -1 438 4 438 1 b 424 -16 438 -8 432 -13 b 356 -49 409 -20 379 -36 b 234 -180 306 -83 258 -133 b 219 -192 230 -188 224 -192 b 200 -176 213 -192 206 -187 b 9 -15 157 -102 89 -45 b 0 0 2 -12 0 -6 b 16 18 0 9 2 12 b 200 176 93 48 159 104 b 212 190 205 186 208 188 m 239 113 b 236 117 238 116 238 117 b 230 108 235 117 234 115 b 92 -15 196 58 140 8 b 88 -18 91 -16 88 -18 b 92 -20 88 -18 91 -19 b 198 -116 130 -43 166 -74 b 200 -117 200 -117 200 -117 b 201 -117 200 -117 201 -117 b 264 -43 212 -98 242 -62 b 345 15 288 -19 321 4 b 348 18 347 16 348 16 b 344 20 348 18 347 19 b 239 113 307 41 266 79 '\n },\n 'noteheadDiamondBlack': {\n 'x_min': 0,\n 'x_max': 432.828125,\n 'ha': 442,\n 'o': 'm 209 186 b 213 187 210 187 212 187 b 216 187 215 187 216 187 b 224 174 216 186 220 180 b 420 -1 269 105 338 43 b 432 -12 431 -8 432 -9 b 421 -23 432 -15 432 -16 b 228 -180 345 -70 264 -137 b 219 -188 221 -188 221 -188 l 219 -188 b 208 -177 215 -188 215 -188 b 10 1 163 -106 93 -44 b 0 11 0 6 0 8 b 10 22 0 13 0 15 b 202 179 87 69 167 136 b 209 186 206 183 209 186 '\n },\n 'augmentationDot': {\n 'x_min': 0,\n 'x_max': 133.390625,\n 'ha': 136,\n 'o': 'm 54 66 b 65 68 58 68 61 68 b 122 37 88 68 110 56 b 133 -1 130 26 133 12 b 104 -58 133 -23 123 -44 b 66 -69 92 -65 78 -69 b 10 -38 44 -69 23 -58 b 0 -1 2 -27 0 -13 b 54 66 0 30 20 61 '\n },\n 'tremolo1': {\n 'x_min': -206.890625,\n 'x_max': 428.75,\n 'ha': 438,\n 'o': 'm 389 -351 b 394 -351 390 -351 393 -351 b 428 -385 413 -351 428 -367 b 428 -394 428 -388 428 -391 b 394 -428 426 -406 421 -410 l 332 -473 l 269 -516 l 205 -560 l 141 -603 l 77 -648 l 13 -692 l -50 -737 l -114 -780 l -145 -802 b -171 -813 -157 -810 -163 -813 b -175 -813 -172 -813 -174 -813 b -206 -777 -194 -811 -206 -795 b -202 -760 -206 -771 -205 -766 b -87 -675 -197 -752 -206 -757 l -34 -639 l 83 -557 l 145 -514 l 209 -470 l 272 -427 b 389 -351 375 -356 381 -352 '\n },\n 'flag8thUp': {\n 'x_min': -24.5,\n 'x_max': 317.140625,\n 'ha': 324,\n 'o': 'm -24 -161 l -24 -5 l -20 -5 b 0 -24 -9 -5 -2 -12 b 171 -315 21 -124 84 -233 b 317 -660 268 -406 317 -531 b 187 -1014 317 -782 274 -909 b 161 -1034 172 -1034 171 -1034 b 141 -1013 149 -1034 141 -1025 b 152 -991 141 -1004 142 -1002 b 266 -682 228 -899 266 -788 b 174 -430 266 -588 236 -498 b -23 -317 136 -388 66 -348 b -24 -161 -23 -316 -24 -285 '\n },\n 'flag8thDown': {\n 'x_min': -21.78125,\n 'x_max': 367.5,\n 'ha': 375,\n 'o': 'm 230 1031 b 238 1032 232 1032 235 1032 b 259 1014 245 1032 251 1027 b 367 662 330 906 367 782 b 364 602 367 641 367 621 b 232 317 352 488 304 384 b 57 120 155 245 103 187 b -1 18 31 84 6 40 b -19 4 -4 11 -12 4 l -21 4 l -21 159 l -21 315 l -16 315 b 96 335 10 315 62 324 b 315 695 227 380 315 527 b 313 738 315 709 314 724 b 224 991 304 825 273 916 b 216 1013 219 999 216 1007 b 230 1031 216 1021 220 1028 '\n },\n 'flag16thUp': {\n 'x_min': -24.5,\n 'x_max': 317.140625,\n 'ha': 324,\n 'o': 'm -24 -147 l -24 -5 l -20 -5 b -1 -19 -12 -5 -4 -11 b 58 -123 6 -43 31 -86 b 196 -278 93 -173 134 -219 b 317 -570 274 -356 317 -460 b 294 -713 317 -617 308 -666 l 289 -724 l 294 -735 b 317 -873 308 -780 317 -827 b 235 -1132 317 -963 288 -1054 b 209 -1165 228 -1140 224 -1146 b 189 -1177 204 -1172 196 -1177 b 171 -1164 182 -1177 175 -1172 b 168 -1154 170 -1161 168 -1159 b 181 -1132 168 -1149 172 -1142 b 269 -891 238 -1064 269 -975 b 269 -881 269 -886 269 -884 b 262 -814 269 -857 265 -827 b 258 -800 261 -811 259 -806 b 142 -628 240 -731 198 -667 b -8 -589 112 -606 47 -589 b -20 -589 -13 -589 -19 -589 l -24 -589 l -24 -449 l -24 -308 l -20 -308 b -1 -322 -12 -308 -4 -313 b 58 -424 6 -345 31 -388 b 194 -580 93 -476 136 -523 b 259 -660 221 -606 245 -635 b 261 -663 259 -662 261 -663 b 264 -656 262 -663 262 -660 b 269 -587 268 -632 269 -610 b 264 -521 269 -566 268 -544 b 262 -512 264 -517 262 -513 b 258 -498 261 -509 259 -503 b 142 -326 240 -428 198 -365 b -8 -287 112 -303 47 -288 b -20 -287 -13 -287 -19 -287 l -24 -287 l -24 -147 '\n },\n 'flag16thDown': {\n 'x_min': -21.78125,\n 'x_max': 362.0625,\n 'ha': 369,\n 'o': 'm 302 1031 b 308 1032 304 1032 307 1032 b 330 1016 318 1032 325 1027 b 362 867 351 970 362 920 b 340 738 362 824 353 780 l 336 727 l 340 717 b 362 591 355 677 362 634 b 257 323 362 496 325 401 b 204 272 243 306 227 290 b 20 56 129 206 66 133 b -1 18 12 44 0 22 b -19 4 -4 9 -12 4 l -21 4 l -21 140 l -21 276 l -12 277 b 167 333 61 288 127 309 b 319 598 262 388 319 491 b 311 664 319 620 317 642 l 310 673 l 304 664 b 204 548 279 620 250 587 b 20 333 129 483 66 409 b -1 292 12 320 0 298 b -19 280 -4 285 -12 280 l -21 280 l -21 416 l -21 552 l -12 553 b 167 609 61 564 127 585 b 319 874 264 666 319 770 b 294 992 319 914 311 954 b 288 1011 288 1004 288 1007 b 302 1031 288 1021 294 1028 '\n },\n 'flag32ndUp': {\n 'x_min': -24.5,\n 'x_max': 315.78125,\n 'ha': 322,\n 'o': 'm -24 -145 l -24 -5 l -20 -5 b 1 -26 -10 -5 -6 -9 b 175 -241 31 -86 96 -166 b 314 -548 259 -323 304 -420 b 315 -589 315 -555 315 -571 b 314 -630 315 -606 315 -623 b 298 -730 311 -664 306 -699 l 295 -742 l 296 -748 b 314 -850 304 -778 311 -813 b 315 -892 315 -857 315 -874 b 314 -932 315 -909 315 -925 b 298 -1032 311 -967 306 -1002 l 295 -1045 l 296 -1050 b 314 -1153 304 -1081 311 -1115 b 315 -1193 315 -1160 315 -1177 b 314 -1235 315 -1211 315 -1228 b 217 -1526 306 -1338 270 -1444 b 201 -1533 213 -1532 208 -1533 b 182 -1522 193 -1533 185 -1529 b 179 -1514 181 -1518 179 -1517 b 189 -1489 179 -1508 182 -1501 b 266 -1217 240 -1403 266 -1308 b 262 -1156 266 -1196 265 -1177 b 110 -907 247 -1043 190 -950 b 0 -889 87 -895 50 -889 l -1 -889 l -24 -889 l -24 -749 l -24 -610 l -20 -610 b 1 -631 -10 -610 -6 -614 b 175 -846 31 -691 96 -771 b 259 -956 213 -884 236 -914 b 265 -966 262 -961 264 -966 b 265 -966 265 -966 265 -966 b 265 -953 265 -964 265 -959 b 266 -920 266 -943 266 -932 b 262 -853 266 -898 265 -873 b 110 -605 247 -741 190 -648 b 0 -587 87 -592 50 -587 l -1 -587 l -24 -587 l -24 -448 l -24 -308 l -20 -308 b 1 -328 -10 -308 -6 -312 b 175 -544 31 -388 96 -469 b 259 -655 213 -581 236 -612 b 265 -663 262 -659 264 -663 b 265 -663 265 -663 265 -663 b 265 -650 265 -663 265 -657 b 266 -617 266 -641 266 -630 b 262 -551 266 -595 265 -570 b 110 -303 247 -438 190 -345 b 0 -284 87 -290 50 -284 l -1 -284 l -24 -284 l -24 -145 '\n },\n 'flag32ndDown': {\n 'x_min': -21.78125,\n 'x_max': 366.140625,\n 'ha': 374,\n 'o': 'm 276 1378 b 284 1379 279 1379 281 1379 b 306 1360 292 1379 298 1374 b 352 1247 326 1326 343 1286 b 366 1139 362 1213 366 1175 b 347 1009 366 1093 359 1049 l 344 1002 l 347 992 b 352 971 348 986 351 977 b 366 863 362 936 366 899 b 347 732 366 818 359 773 l 344 725 l 347 716 b 352 695 348 710 351 700 b 366 588 362 659 366 623 b 223 262 366 464 314 345 b 189 233 212 252 212 252 b 35 76 126 183 73 129 b -1 16 20 56 2 27 b -19 4 -4 9 -12 4 l -21 4 l -21 137 l -21 270 l -17 270 b 186 344 59 281 134 308 b 319 606 270 399 319 499 b 317 650 319 620 319 635 l 315 659 l 314 655 b 223 537 288 607 258 570 b 189 509 212 528 212 528 b 35 352 126 459 73 405 b -1 292 20 333 2 303 b -19 280 -4 285 -12 280 l -21 280 l -21 413 l -21 546 l -17 546 b 186 620 59 557 134 584 b 319 882 270 675 319 775 b 317 925 319 896 319 911 l 315 935 l 314 931 b 223 813 288 884 258 846 b 189 785 212 805 212 805 b 35 628 126 735 73 681 b -1 569 20 609 2 580 b -19 556 -4 562 -12 556 l -21 556 l -21 689 l -21 823 l -17 823 b 202 907 68 835 152 867 b 319 1157 280 968 319 1061 b 270 1338 319 1218 303 1281 b 262 1358 264 1349 262 1353 b 262 1364 262 1360 262 1363 b 276 1378 265 1371 269 1376 '\n },\n 'flag64thUp': {\n 'x_min': -24.5,\n 'x_max': 314.421875,\n 'ha': 321,\n 'o': 'm -24 -145 l -24 -5 l -20 -5 b 0 -23 -9 -5 -2 -12 b 27 -87 4 -38 14 -66 b 138 -220 53 -136 88 -177 b 235 -328 179 -255 208 -288 b 314 -592 287 -409 314 -501 b 292 -732 314 -639 307 -687 l 289 -742 l 294 -756 b 314 -896 307 -802 314 -849 b 292 -1035 314 -943 307 -991 l 289 -1045 l 294 -1057 b 314 -1197 307 -1104 314 -1152 b 292 -1338 314 -1246 307 -1292 l 289 -1347 l 294 -1360 b 314 -1500 307 -1407 314 -1454 b 273 -1689 314 -1565 300 -1628 b 250 -1712 265 -1710 261 -1712 b 228 -1691 236 -1712 228 -1704 l 228 -1685 l 234 -1675 b 270 -1507 258 -1621 270 -1564 b 98 -1193 270 -1381 209 -1261 b 40 -1174 76 -1179 58 -1174 b -10 -1189 24 -1174 8 -1178 b -20 -1192 -14 -1192 -16 -1192 l -24 -1192 l -24 -1052 l -24 -913 l -20 -913 b 0 -931 -9 -913 -2 -920 b 27 -995 4 -946 14 -974 b 138 -1128 53 -1043 88 -1085 b 257 -1275 190 -1172 228 -1220 b 262 -1283 259 -1279 262 -1283 l 262 -1283 b 269 -1249 264 -1282 268 -1260 b 270 -1206 270 -1233 270 -1220 b 98 -891 270 -1075 206 -957 b 40 -871 76 -877 58 -871 b -10 -886 24 -871 8 -875 b -20 -889 -14 -889 -16 -889 l -24 -889 l -24 -749 l -24 -610 l -20 -610 b 0 -628 -9 -610 -2 -617 b 27 -692 4 -644 14 -671 b 138 -825 53 -741 88 -782 b 257 -973 190 -870 228 -917 b 262 -981 259 -977 262 -981 l 262 -981 b 269 -946 264 -979 268 -957 b 270 -903 270 -931 270 -917 b 98 -588 270 -774 206 -655 b 40 -569 76 -574 58 -569 b -10 -584 24 -569 8 -574 b -20 -587 -14 -587 -16 -587 l -24 -587 l -24 -448 l -24 -308 l -20 -308 b 0 -326 -9 -308 -2 -315 b 27 -390 4 -341 14 -369 b 138 -523 53 -438 88 -480 b 257 -670 190 -567 228 -614 b 262 -678 259 -674 262 -678 b 262 -678 262 -678 262 -678 b 269 -644 264 -677 268 -656 b 270 -601 270 -628 270 -614 b 98 -285 270 -471 206 -352 b 40 -266 76 -273 58 -266 b -10 -281 24 -266 8 -272 b -20 -284 -14 -284 -16 -284 l -24 -284 l -24 -145 '\n },\n 'flag64thDown': {\n 'x_min': -21.78125,\n 'x_max': 367.5,\n 'ha': 375,\n 'o': 'm 259 1553 b 265 1553 261 1553 264 1553 b 288 1540 272 1553 277 1550 b 367 1351 340 1493 367 1424 b 336 1221 367 1308 357 1263 l 332 1211 l 333 1208 b 367 1077 356 1170 367 1124 b 336 945 367 1032 357 986 l 332 935 l 333 932 b 367 800 356 893 367 848 b 336 669 367 756 357 710 l 332 659 l 333 656 b 367 523 356 617 367 571 b 345 412 367 485 360 446 b 231 273 322 356 284 310 b -1 19 121 195 27 93 b -17 4 -4 11 -10 5 l -21 4 l -21 134 l -21 265 l -17 265 b 133 291 20 265 96 278 b 318 537 245 328 318 433 b 307 603 318 559 315 582 b 303 614 304 612 304 614 b 298 609 302 614 300 613 b 231 549 281 589 258 567 b -1 295 121 471 27 369 b -17 280 -4 287 -10 281 l -21 280 l -21 410 l -21 541 l -17 541 b 133 567 20 541 96 555 b 318 813 245 605 318 709 b 307 880 318 835 315 859 b 303 891 304 888 304 891 b 298 885 302 891 300 888 b 231 825 281 866 258 843 b -1 571 121 748 27 645 b -17 556 -4 563 -10 557 l -21 556 l -21 687 l -21 817 l -17 817 b 133 843 20 817 96 830 b 318 1089 245 881 318 985 b 307 1156 318 1111 315 1134 b 303 1167 304 1164 304 1167 b 298 1161 302 1167 300 1164 b 231 1102 281 1140 258 1120 b -1 848 121 1024 27 921 b -17 832 -4 839 -10 834 l -21 832 l -21 963 l -21 1093 l -17 1093 b 114 1113 12 1093 78 1103 b 313 1314 215 1142 289 1218 b 318 1364 317 1331 318 1347 b 255 1511 318 1422 295 1478 b 243 1532 247 1519 243 1525 b 259 1553 243 1540 250 1550 '\n },\n 'flag128thUp': {\n 'x_min': -24.5,\n 'x_max': 313.0625,\n 'ha': 319,\n 'o': 'm -24 -133 l -24 -5 l -20 -5 b -1 -19 -12 -5 -4 -11 b 142 -213 13 -61 74 -144 b 258 -376 196 -269 230 -315 b 313 -605 295 -449 313 -528 b 292 -742 313 -652 306 -699 b 288 -752 289 -748 288 -752 b 288 -752 288 -752 288 -752 b 292 -764 289 -753 291 -757 b 313 -907 306 -811 313 -860 b 292 -1045 313 -954 306 -1002 b 288 -1054 289 -1050 288 -1054 b 288 -1054 288 -1054 288 -1054 b 292 -1067 289 -1054 291 -1060 b 313 -1210 306 -1113 313 -1161 b 292 -1346 313 -1257 306 -1304 b 288 -1357 289 -1353 288 -1357 b 288 -1357 288 -1357 288 -1357 b 292 -1368 289 -1357 291 -1363 b 313 -1512 306 -1415 313 -1464 b 292 -1648 313 -1560 306 -1605 b 288 -1660 289 -1654 288 -1660 b 288 -1660 288 -1660 288 -1660 b 292 -1671 289 -1660 291 -1665 b 313 -1814 306 -1719 313 -1766 b 250 -2040 313 -1897 291 -1977 b 232 -2062 238 -2057 236 -2059 b 221 -2065 230 -2063 225 -2065 b 200 -2045 210 -2065 201 -2057 b 200 -2043 200 -2044 200 -2044 b 208 -2026 200 -2037 202 -2034 b 269 -1826 249 -1966 269 -1897 b 153 -1544 269 -1726 230 -1625 b -9 -1472 115 -1506 58 -1481 b -21 -1471 -14 -1471 -19 -1471 l -24 -1471 l -24 -1343 l -24 -1215 l -20 -1215 b -1 -1229 -12 -1215 -4 -1221 b 142 -1424 13 -1270 74 -1353 b 257 -1582 196 -1478 228 -1524 b 264 -1594 261 -1589 264 -1594 l 264 -1594 b 265 -1582 264 -1594 264 -1589 b 270 -1525 268 -1562 270 -1544 b 153 -1243 270 -1424 228 -1321 b -9 -1170 115 -1203 58 -1178 b -21 -1168 -14 -1170 -19 -1168 l -24 -1168 l -24 -1041 l -24 -913 l -20 -913 b -1 -927 -12 -913 -4 -918 b 142 -1121 13 -967 74 -1050 b 257 -1281 196 -1175 228 -1221 b 264 -1292 261 -1286 264 -1292 l 264 -1292 b 265 -1279 264 -1292 264 -1286 b 270 -1222 268 -1261 270 -1242 b 153 -941 270 -1121 228 -1018 b -9 -867 115 -900 58 -875 b -21 -866 -14 -867 -19 -866 l -24 -866 l -24 -738 l -24 -610 l -20 -610 b -1 -624 -12 -610 -4 -616 b 142 -818 13 -664 74 -749 b 257 -978 196 -873 228 -918 b 264 -989 261 -984 264 -989 l 264 -989 b 265 -977 264 -989 264 -984 b 270 -920 268 -959 270 -939 b 153 -638 270 -818 228 -716 b -9 -564 115 -598 58 -573 b -21 -563 -14 -564 -19 -563 l -24 -563 l -24 -435 l -24 -308 l -20 -308 b -1 -322 -12 -308 -4 -313 b 142 -516 13 -363 74 -446 b 257 -675 196 -571 228 -616 b 264 -687 261 -681 264 -687 l 264 -687 b 265 -674 264 -687 264 -681 b 270 -617 268 -656 270 -637 b 153 -335 270 -516 228 -413 b -9 -262 115 -295 58 -270 b -21 -260 -14 -262 -19 -260 l -24 -260 l -24 -133 '\n },\n 'flag128thDown': {\n 'x_min': -21.78125,\n 'x_max': 367.5,\n 'ha': 375,\n 'o': 'm 276 1900 b 284 1901 279 1900 281 1901 b 306 1883 291 1901 298 1896 b 367 1686 347 1825 367 1757 b 343 1558 367 1643 359 1600 l 338 1549 l 343 1537 b 367 1411 359 1497 367 1454 b 343 1282 367 1367 359 1324 l 338 1272 l 343 1261 b 367 1135 359 1221 367 1178 b 343 1007 367 1090 359 1047 l 338 996 l 343 985 b 367 859 359 945 367 902 b 343 731 367 814 359 771 l 338 720 l 343 709 b 367 582 359 667 367 626 b 289 362 367 503 340 426 b 239 312 276 345 259 330 b 29 77 152 237 76 152 b -1 18 14 54 2 30 b -19 4 -4 11 -12 4 l -21 4 l -21 133 l -20 260 l -13 262 b 98 299 17 269 62 284 b 111 305 103 302 110 305 b 167 334 123 310 156 327 b 319 595 264 391 319 491 b 313 659 319 616 318 638 b 310 667 311 664 311 667 b 307 663 310 667 308 666 b 240 588 289 637 269 614 b 16 331 141 505 62 413 b -1 294 8 316 1 302 b -19 280 -4 287 -12 280 l -21 280 l -21 408 l -20 537 l -13 538 b 98 576 17 545 62 560 b 111 581 103 578 110 581 b 167 610 123 587 156 603 b 319 871 264 667 319 767 b 313 935 319 892 318 913 b 310 942 311 941 311 942 b 307 939 310 942 308 941 b 240 864 289 913 269 889 b 16 607 141 781 62 689 b -1 570 8 592 1 578 b -19 556 -4 563 -12 556 l -21 556 l -21 684 l -20 813 l -13 814 b 98 852 17 821 62 836 b 111 857 103 855 110 857 b 167 886 123 863 156 880 b 319 1147 264 943 319 1043 b 313 1211 319 1168 318 1189 b 310 1218 311 1217 311 1218 b 307 1215 310 1218 308 1217 b 240 1140 289 1188 269 1165 b 16 884 141 1057 62 966 b -1 846 8 868 1 855 b -19 832 -4 839 -12 832 l -21 832 l -21 960 l -20 1089 l -13 1090 b 98 1128 17 1097 62 1111 b 111 1134 103 1131 110 1134 b 167 1163 123 1139 156 1156 b 319 1424 264 1220 319 1320 b 313 1486 319 1444 318 1465 b 310 1494 311 1493 311 1494 b 307 1492 310 1494 308 1493 b 240 1417 289 1464 269 1442 b 16 1160 141 1333 62 1242 b -1 1121 8 1145 1 1131 b -19 1109 -4 1115 -12 1109 l -21 1109 l -21 1236 l -20 1365 l -13 1367 b 98 1404 17 1374 62 1388 b 111 1410 103 1407 110 1410 b 250 1508 172 1437 215 1467 b 319 1701 296 1564 319 1633 b 270 1859 319 1757 303 1814 b 262 1882 265 1868 262 1875 b 276 1900 262 1890 266 1896 '\n },\n 'accidentalFlat': {\n 'x_min': -21.78125,\n 'x_max': 251.8125,\n 'ha': 257,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 383 20 616 20 616 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 201 l -21 616 l -20 620 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 '\n },\n 'accidentalNatural': {\n 'x_min': 0,\n 'x_max': 239.5625,\n 'ha': 244,\n 'o': 'm 10 460 b 20 462 13 462 14 462 b 39 449 28 462 35 458 l 40 446 l 40 326 b 40 205 40 259 40 205 b 127 227 40 205 80 215 b 220 249 196 244 213 249 b 227 247 224 249 225 248 b 238 237 231 245 235 241 l 239 233 l 239 -106 l 239 -448 l 238 -451 b 219 -463 234 -459 225 -463 b 198 -451 210 -463 202 -459 l 197 -448 l 197 -324 b 197 -201 197 -248 197 -201 b 110 -223 196 -201 157 -210 b 17 -245 42 -240 24 -245 b 10 -242 13 -245 13 -244 b 0 -233 6 -241 2 -237 l 0 -230 l 0 108 l 0 446 l 0 449 b 10 460 2 453 6 458 m 197 22 b 197 70 197 41 197 58 b 196 116 197 113 197 116 l 196 116 b 118 97 196 116 160 106 l 40 77 l 40 -18 b 40 -112 40 -69 40 -112 l 119 -93 l 197 -73 l 197 22 '\n },\n 'accidentalSharp': {\n 'x_min': 0,\n 'x_max': 323.9375,\n 'ha': 331,\n 'o': 'm 217 535 b 225 537 220 537 221 537 b 245 524 235 537 242 533 l 246 521 l 247 390 l 247 258 l 273 265 b 306 270 288 269 299 270 b 322 259 315 270 319 267 b 323 208 323 256 323 233 b 322 158 323 184 323 159 b 288 140 318 148 315 147 b 247 130 254 131 247 130 b 247 65 247 130 247 104 b 247 20 247 51 247 36 l 247 -88 l 273 -81 b 306 -76 289 -77 299 -76 b 318 -81 311 -76 315 -77 b 323 -123 323 -87 323 -86 l 323 -138 l 323 -154 b 318 -195 323 -191 323 -190 b 269 -210 314 -199 315 -199 b 249 -216 259 -213 250 -216 l 247 -216 l 247 -349 l 246 -483 l 245 -487 b 225 -499 242 -495 234 -499 b 206 -487 219 -499 210 -495 l 205 -483 l 205 -355 l 205 -227 l 204 -227 l 181 -233 l 138 -244 b 117 -249 127 -247 117 -249 b 115 -385 115 -249 115 -256 l 115 -523 l 114 -526 b 95 -538 110 -534 102 -538 b 74 -526 87 -538 78 -534 l 73 -523 l 73 -391 b 72 -260 73 -269 73 -260 b 72 -260 72 -260 72 -260 b 19 -273 61 -263 23 -273 b 0 -260 10 -273 4 -267 b 0 -209 0 -256 0 -256 l 0 -162 l 1 -158 b 61 -134 5 -148 5 -148 l 73 -131 l 73 -22 b 72 86 73 79 73 86 b 72 86 72 86 72 86 b 19 74 61 83 23 74 b 0 86 10 74 4 79 b 0 137 0 90 0 90 l 0 184 l 1 188 b 61 212 5 198 5 198 l 73 215 l 73 348 l 73 481 l 74 485 b 95 498 78 492 87 498 b 103 495 98 498 100 496 b 114 485 107 494 111 489 l 115 481 l 115 353 l 115 226 l 121 226 b 159 235 123 227 141 231 l 198 247 l 205 248 l 205 384 l 205 521 l 206 524 b 217 535 209 528 212 533 m 205 9 b 205 119 205 70 205 119 l 205 119 b 182 113 204 119 194 116 l 138 102 b 117 97 127 99 117 97 b 115 -12 115 97 115 91 l 115 -122 l 121 -120 b 159 -111 123 -119 141 -115 l 198 -101 l 205 -98 l 205 9 '\n },\n 'accidentalDoubleSharp': {\n 'x_min': 0,\n 'x_max': 367.5,\n 'ha': 375,\n 'o': 'm 0 124 l 0 187 l 61 187 l 122 187 l 122 138 l 122 91 l 153 61 l 183 30 l 213 61 l 243 91 l 243 138 l 243 187 l 306 187 l 367 187 l 367 124 l 367 61 l 321 61 l 274 61 l 243 30 l 213 0 l 243 -31 l 274 -62 l 321 -62 l 367 -62 l 367 -124 l 367 -188 l 306 -188 l 243 -188 l 243 -140 l 243 -93 l 213 -62 l 183 -31 l 153 -62 l 122 -93 l 122 -140 l 122 -188 l 61 -188 l 0 -188 l 0 -124 l 0 -62 l 46 -62 l 92 -62 l 123 -31 l 153 0 l 123 30 l 92 61 l 46 61 l 0 61 l 0 124 '\n },\n 'accidentalDoubleFlat': {\n 'x_min': -21.78125,\n 'x_max': 483.1875,\n 'ha': 493,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 383 20 616 20 616 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 179 164 199 187 192 l 210 176 l 210 396 l 210 617 l 212 621 b 231 632 216 628 223 632 b 250 620 239 632 247 628 b 251 383 251 616 251 616 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 201 l -21 616 l -20 620 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 '\n },\n 'accidentalParensLeft': {\n 'x_min': -166.0625,\n 'x_max': -25.859375,\n 'ha': 0,\n 'o': 'm -49 369 b -42 370 -46 369 -44 370 b -27 360 -36 370 -29 366 b -25 355 -27 359 -25 358 b -32 335 -25 351 -28 347 b -92 52 -66 248 -87 159 b -93 -1 -93 43 -93 20 b -92 -54 -93 -23 -93 -45 b -32 -337 -85 -162 -66 -251 b -25 -355 -27 -349 -25 -352 b -42 -371 -25 -365 -32 -371 b -61 -353 -50 -371 -51 -369 b -163 -63 -119 -262 -153 -165 b -166 -1 -166 -37 -166 -31 b -163 62 -166 30 -166 36 b -61 352 -153 163 -119 260 b -49 369 -54 365 -51 366 '\n },\n 'accidentalParensRight': {\n 'x_min': 25.859375,\n 'x_max': 164.6875,\n 'ha': 168,\n 'o': 'm 34 369 b 40 370 35 370 38 370 b 59 353 49 370 50 367 b 164 40 122 254 155 158 b 164 0 164 33 164 16 b 164 -40 164 -16 164 -34 b 59 -353 155 -158 122 -254 b 40 -371 53 -366 47 -371 b 34 -370 38 -371 36 -370 b 25 -358 28 -367 25 -363 b 31 -337 25 -352 27 -347 b 92 0 72 -234 92 -117 b 31 335 92 116 72 233 b 25 356 27 345 25 352 b 34 369 25 363 28 366 '\n },\n 'accidentalQuarterToneFlatStein': {\n 'x_min': 0,\n 'x_max': 272.21875,\n 'ha': 278,\n 'o': 'm 243 631 b 250 632 246 632 249 632 b 270 620 259 632 268 628 l 272 616 l 272 201 l 272 -212 l 270 -216 b 251 -229 268 -224 259 -229 b 227 -215 243 -229 240 -229 l 151 -142 b 32 -16 81 -80 53 -49 b 0 84 9 18 0 52 b 111 199 0 149 42 199 b 137 197 119 199 127 198 b 228 151 168 191 197 177 l 231 148 l 231 383 b 232 620 231 616 231 616 b 243 631 234 624 238 630 m 168 131 b 152 133 163 133 157 133 b 107 102 130 133 111 120 b 106 86 107 97 106 91 b 111 41 106 73 108 56 b 227 -152 125 -13 171 -90 l 231 -156 l 231 -37 l 231 80 l 225 87 b 168 131 210 111 190 126 '\n },\n 'accidentalThreeQuarterTonesFlatZimmermann': {\n 'x_min': 0,\n 'x_max': 607.0625,\n 'ha': 619,\n 'o': 'm 243 631 b 250 632 246 632 249 632 b 270 620 259 632 268 628 l 272 616 l 272 201 l 272 -212 l 270 -216 b 251 -229 268 -224 259 -229 b 227 -215 243 -229 240 -229 l 151 -142 b 32 -16 81 -80 53 -49 b 0 84 9 18 0 52 b 111 199 0 149 42 199 b 137 197 119 199 127 198 b 228 151 168 191 197 177 l 231 148 l 231 383 b 232 620 231 616 231 616 b 243 631 234 624 238 630 m 168 131 b 152 133 163 133 157 133 b 107 102 130 133 111 120 b 106 86 107 97 106 91 b 111 41 106 73 108 56 b 227 -152 125 -13 171 -90 l 231 -156 l 231 -37 l 231 80 l 225 87 b 168 131 210 111 190 126 m 347 631 b 353 632 348 632 351 632 b 374 620 363 632 371 628 b 375 383 375 616 375 616 l 375 148 l 377 151 b 492 199 415 183 454 199 b 537 191 507 199 522 197 b 607 84 582 176 607 134 b 583 0 607 58 598 29 b 455 -142 562 -40 533 -72 l 378 -215 b 355 -229 364 -229 362 -229 b 334 -216 345 -229 337 -224 l 333 -212 l 333 201 l 333 616 l 334 620 b 347 631 337 624 341 630 m 465 131 b 451 133 461 133 455 133 b 445 133 449 133 446 133 b 379 87 419 129 396 113 l 375 80 l 375 -37 l 375 -156 l 378 -152 b 499 81 451 -72 499 20 l 499 83 b 465 131 499 113 490 126 '\n },\n 'accidentalQuarterToneSharpStein': {\n 'x_min': 0,\n 'x_max': 193.28125,\n 'ha': 197,\n 'o': 'm 85 514 b 95 517 88 517 89 517 b 114 505 103 517 110 513 l 115 502 l 115 376 b 115 249 115 306 115 249 b 141 258 117 249 127 252 l 167 266 l 172 266 b 190 254 181 265 187 262 l 193 251 l 193 202 l 193 188 b 187 147 193 149 191 152 b 147 130 183 142 182 141 l 115 119 l 115 9 b 115 -99 115 -51 115 -99 b 141 -91 115 -99 127 -95 b 171 -81 166 -81 167 -81 l 171 -81 b 191 -94 181 -81 189 -87 b 193 -142 191 -97 193 -120 b 191 -195 193 -167 191 -194 b 125 -227 187 -205 187 -204 l 115 -230 l 115 -366 l 115 -503 l 114 -506 b 95 -519 110 -514 102 -519 b 74 -506 87 -519 78 -514 l 73 -503 l 73 -374 b 73 -245 73 -260 73 -245 b 73 -245 73 -245 73 -245 b 55 -252 72 -245 63 -249 l 32 -260 b 19 -263 27 -262 23 -263 b 4 -256 13 -263 8 -260 b 0 -215 0 -251 0 -254 b 0 -199 0 -210 0 -206 l 0 -152 l 1 -149 b 8 -140 2 -145 5 -141 b 42 -127 9 -140 24 -133 l 73 -116 l 73 -5 b 73 23 73 4 73 15 b 73 105 73 70 73 105 b 49 97 73 105 61 101 b 17 88 32 91 23 88 b 4 95 10 88 8 91 b 0 137 0 101 0 98 b 0 151 0 141 0 145 l 0 199 l 1 202 b 43 224 5 212 5 212 l 73 234 l 73 367 l 73 502 l 74 505 b 85 514 77 509 81 513 '\n },\n 'accidentalThreeQuarterTonesSharpStein': {\n 'x_min': -1.359375,\n 'x_max': 455.96875,\n 'ha': 465,\n 'o': 'm 352 541 b 357 542 353 542 355 542 b 377 530 364 542 372 537 l 378 526 l 378 394 l 379 262 l 404 266 b 436 270 420 269 430 270 b 450 265 443 270 446 269 b 455 220 455 259 455 260 l 455 208 l 455 161 l 454 156 b 411 140 449 147 447 147 b 378 133 393 137 379 134 b 378 68 378 133 378 106 b 378 22 378 54 378 38 l 379 -87 l 404 -83 b 436 -79 420 -80 430 -79 b 450 -84 443 -79 446 -80 b 455 -129 455 -90 455 -88 l 455 -141 l 455 -188 l 454 -192 b 413 -209 449 -202 447 -202 b 382 -215 398 -212 383 -215 l 378 -215 l 378 -345 l 378 -380 b 375 -485 378 -484 378 -480 b 357 -494 371 -491 364 -494 b 340 -485 351 -494 344 -491 b 336 -383 337 -480 336 -484 l 336 -349 l 336 -223 l 334 -223 b 291 -231 334 -223 314 -227 l 247 -240 l 247 -371 l 246 -503 l 245 -506 b 225 -519 242 -514 234 -519 b 206 -506 219 -519 210 -514 l 205 -503 l 205 -376 l 205 -248 l 160 -256 l 115 -265 l 115 -396 l 115 -527 l 114 -531 b 95 -544 110 -539 102 -544 b 76 -531 87 -544 78 -539 l 73 -527 l 73 -399 b 73 -273 73 -330 73 -273 b 49 -277 73 -273 61 -274 b 17 -281 32 -280 24 -281 b 4 -276 10 -281 8 -280 b -1 -234 0 -269 -1 -272 b 0 -219 -1 -229 0 -224 l 0 -170 l 1 -167 b 10 -158 2 -163 6 -159 b 49 -149 13 -156 16 -155 l 73 -145 l 73 -34 b 73 76 73 26 73 76 b 49 72 73 76 61 74 b 17 68 32 69 24 68 b 4 73 10 68 8 69 b -1 115 0 80 -1 77 b 0 130 -1 120 0 124 l 0 179 l 1 181 b 10 191 2 186 6 190 b 49 199 13 192 16 194 l 73 204 l 73 338 b 73 374 73 352 73 365 b 77 483 73 484 73 477 b 95 492 81 489 88 492 b 111 483 100 492 107 489 b 115 378 115 477 115 483 l 115 342 b 117 212 115 223 115 212 b 204 229 117 212 200 227 l 205 229 l 205 365 l 205 502 l 206 505 b 225 517 210 513 219 517 b 245 505 234 517 242 513 l 246 502 l 247 369 l 247 237 l 249 237 b 336 254 253 238 336 254 b 337 390 336 254 337 302 l 337 526 l 338 530 b 352 541 341 535 347 539 m 336 15 b 336 126 336 102 336 126 l 336 126 b 291 117 336 126 315 122 l 247 109 l 247 -1 l 247 -112 l 249 -112 b 336 -95 253 -111 336 -95 b 336 15 336 -95 336 -56 m 205 -120 b 205 -55 205 -120 205 -93 b 205 -9 205 -41 205 -24 l 205 101 l 160 93 l 115 84 l 115 -26 b 115 -83 115 -49 115 -69 b 117 -137 115 -133 115 -137 b 205 -120 118 -137 204 -120 '\n },\n 'accidentalBuyukMucennebFlat': {\n 'x_min': -171.5,\n 'x_max': 251.8125,\n 'ha': 257,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 '\n },\n 'accidentalBakiyeFlat': {\n 'x_min': -176.9375,\n 'x_max': 251.8125,\n 'ha': 257,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 '\n },\n 'accidentalKomaSharp': {\n 'x_min': -1.359375,\n 'x_max': 455.96875,\n 'ha': 465,\n 'o': 'm 352 541 b 357 542 353 542 355 542 b 377 530 364 542 372 537 l 378 526 l 378 394 l 379 262 l 404 266 b 436 270 420 269 430 270 b 450 265 443 270 446 269 b 455 220 455 259 455 260 l 455 208 l 455 161 l 454 156 b 411 140 449 147 447 147 b 378 133 393 137 379 134 b 378 68 378 133 378 106 b 378 22 378 54 378 38 l 379 -87 l 404 -83 b 436 -79 420 -80 430 -79 b 450 -84 443 -79 446 -80 b 455 -129 455 -90 455 -88 l 455 -141 l 455 -188 l 454 -192 b 413 -209 449 -202 447 -202 b 382 -215 398 -212 383 -215 l 378 -215 l 378 -345 l 378 -380 b 375 -485 378 -484 378 -480 b 357 -494 371 -491 364 -494 b 340 -485 351 -494 344 -491 b 336 -383 337 -480 336 -484 l 336 -349 l 336 -223 l 334 -223 b 291 -231 334 -223 314 -227 l 247 -240 l 247 -371 l 246 -503 l 245 -506 b 225 -519 242 -514 234 -519 b 206 -506 219 -519 210 -514 l 205 -503 l 205 -376 l 205 -248 l 160 -256 l 115 -265 l 115 -396 l 115 -527 l 114 -531 b 95 -544 110 -539 102 -544 b 76 -531 87 -544 78 -539 l 73 -527 l 73 -399 b 73 -273 73 -330 73 -273 b 49 -277 73 -273 61 -274 b 17 -281 32 -280 24 -281 b 4 -276 10 -281 8 -280 b -1 -234 0 -269 -1 -272 b 0 -219 -1 -229 0 -224 l 0 -170 l 1 -167 b 10 -158 2 -163 6 -159 b 49 -149 13 -156 16 -155 l 73 -145 l 73 -34 b 73 76 73 26 73 76 b 49 72 73 76 61 74 b 17 68 32 69 24 68 b 4 73 10 68 8 69 b -1 115 0 80 -1 77 b 0 130 -1 120 0 124 l 0 179 l 1 181 b 10 191 2 186 6 190 b 49 199 13 192 16 194 l 73 204 l 73 338 b 73 374 73 352 73 365 b 77 483 73 484 73 477 b 95 492 81 489 88 492 b 111 483 100 492 107 489 b 115 378 115 477 115 483 l 115 342 b 117 212 115 223 115 212 b 204 229 117 212 200 227 l 205 229 l 205 365 l 205 502 l 206 505 b 225 517 210 513 219 517 b 245 505 234 517 242 513 l 246 502 l 247 369 l 247 237 l 249 237 b 336 254 253 238 336 254 b 337 390 336 254 337 302 l 337 526 l 338 530 b 352 541 341 535 347 539 m 336 15 b 336 126 336 102 336 126 l 336 126 b 291 117 336 126 315 122 l 247 109 l 247 -1 l 247 -112 l 249 -112 b 336 -95 253 -111 336 -95 b 336 15 336 -95 336 -56 m 205 -120 b 205 -55 205 -120 205 -93 b 205 -9 205 -41 205 -24 l 205 101 l 160 93 l 115 84 l 115 -26 b 115 -83 115 -49 115 -69 b 117 -137 115 -133 115 -137 b 205 -120 118 -137 204 -120 '\n },\n 'accidentalKucukMucennebSharp': {\n 'x_min': -1.359375,\n 'x_max': 255.890625,\n 'ha': 261,\n 'o': 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 '\n },\n 'articAccentAbove': {\n 'x_min': -348.4375,\n 'x_max': 24.5,\n 'ha': 25,\n 'o': 'm -330 155 b -322 156 -329 156 -326 156 b -315 156 -319 156 -317 156 b -298 147 -311 155 -308 154 b -19 30 -224 98 -122 55 l 2 26 b 24 -1 17 22 24 13 b 2 -27 24 -15 17 -23 l -19 -31 b -298 -148 -122 -56 -224 -99 b -322 -158 -313 -158 -315 -158 b -348 -131 -338 -158 -348 -145 b -344 -117 -348 -127 -347 -122 b -328 -104 -341 -112 -338 -111 b -127 -8 -269 -65 -202 -33 b -106 0 -115 -4 -106 -1 b -127 6 -106 0 -115 2 b -328 102 -202 31 -269 63 b -344 116 -338 109 -341 111 b -348 130 -347 120 -348 124 b -330 155 -348 141 -341 152 '\n },\n 'articAccentBelow': {\n 'x_min': -348.4375,\n 'x_max': 24.5,\n 'ha': 25,\n 'o': 'm -330 155 b -322 156 -329 156 -326 156 b -315 156 -319 156 -317 156 b -298 147 -311 155 -308 154 b -19 30 -224 98 -122 55 l 2 26 b 24 -1 17 22 24 13 b 2 -27 24 -15 17 -23 l -19 -31 b -298 -148 -122 -56 -224 -99 b -322 -158 -313 -158 -315 -158 b -348 -131 -338 -158 -348 -145 b -344 -117 -348 -127 -347 -122 b -328 -104 -341 -112 -338 -111 b -127 -8 -269 -65 -202 -33 b -106 0 -115 -4 -106 -1 b -127 6 -106 0 -115 2 b -328 102 -202 31 -269 63 b -344 116 -338 109 -341 111 b -348 130 -347 120 -348 124 b -330 155 -348 141 -341 152 '\n },\n 'articTenutoAbove': {\n 'x_min': 0,\n 'x_max': 318.5,\n 'ha': 325,\n 'o': 'm 20 376 b 167 377 23 377 96 377 b 296 376 231 377 294 377 b 318 347 311 371 318 359 b 296 316 318 333 311 320 b 159 315 294 315 227 315 b 21 316 91 315 24 315 b 0 345 6 320 0 333 b 20 376 0 359 6 371 '\n },\n 'articTenutoBelow': {\n 'x_min': 0,\n 'x_max': 318.5,\n 'ha': 325,\n 'o': 'm 20 376 b 167 377 23 377 96 377 b 296 376 231 377 294 377 b 318 347 311 371 318 359 b 296 316 318 333 311 320 b 159 315 294 315 227 315 b 21 316 91 315 24 315 b 0 345 6 320 0 333 b 20 376 0 359 6 371 '\n },\n 'articStaccatoAbove': {\n 'x_min': 0,\n 'x_max': 133.390625,\n 'ha': 136,\n 'o': 'm 54 66 b 65 68 58 68 61 68 b 122 37 88 68 110 56 b 133 -1 130 26 133 12 b 104 -58 133 -23 123 -44 b 66 -69 92 -65 78 -69 b 10 -38 44 -69 23 -58 b 0 -1 2 -27 0 -13 b 54 66 0 30 20 61 '\n },\n 'articStaccatoBelow': {\n 'x_min': 0,\n 'x_max': 133.390625,\n 'ha': 136,\n 'o': 'm 54 66 b 65 68 58 68 61 68 b 122 37 88 68 110 56 b 133 -1 130 26 133 12 b 104 -58 133 -23 123 -44 b 66 -69 92 -65 78 -69 b 10 -38 44 -69 23 -58 b 0 -1 2 -27 0 -13 b 54 66 0 30 20 61 '\n },\n 'articStaccatissimoAbove': {\n 'x_min': -73.5,\n 'x_max': 72.140625,\n 'ha': 74,\n 'o': 'm -72 252 l -73 254 l 0 254 l 72 254 l 70 252 b 0 -1 70 248 0 -1 b -72 252 -1 -1 -72 248 '\n },\n 'articStaccatissimoBelow': {\n 'x_min': -73.5,\n 'x_max': 72.140625,\n 'ha': 74,\n 'o': 'm -72 252 l -73 254 l 0 254 l 72 254 l 70 252 b 0 -1 70 248 0 -1 b -72 252 -1 -1 -72 248 '\n },\n 'articMarcatoAbove': {\n 'x_min': -149.71875,\n 'x_max': 148.359375,\n 'ha': 151,\n 'o': 'm -8 -1 b -1 0 -5 -1 -4 0 b 16 -11 5 0 13 -4 b 83 -186 17 -12 47 -90 l 148 -358 l 148 -363 b 127 -385 148 -376 138 -385 b 112 -378 122 -385 118 -383 b 54 -226 110 -374 114 -385 b 0 -81 24 -147 0 -81 b -55 -226 -1 -81 -25 -147 b -114 -378 -115 -385 -111 -374 b -129 -385 -119 -383 -123 -385 b -149 -363 -140 -385 -149 -376 l -149 -358 l -84 -186 b -19 -11 -49 -90 -19 -12 b -8 -1 -17 -8 -12 -4 '\n },\n 'articMarcatoBelow': {\n 'x_min': -149.71875,\n 'x_max': 148.359375,\n 'ha': 151,\n 'o': 'm -8 -1 b -1 0 -5 -1 -4 0 b 16 -11 5 0 13 -4 b 83 -186 17 -12 47 -90 l 148 -358 l 148 -363 b 127 -385 148 -376 138 -385 b 112 -378 122 -385 118 -383 b 54 -226 110 -374 114 -385 b 0 -81 24 -147 0 -81 b -55 -226 -1 -81 -25 -147 b -114 -378 -115 -385 -111 -374 b -129 -385 -119 -383 -123 -385 b -149 -363 -140 -385 -149 -376 l -149 -358 l -84 -186 b -19 -11 -49 -90 -19 -12 b -8 -1 -17 -8 -12 -4 '\n },\n 'fermataAbove': {\n 'x_min': -442.359375,\n 'x_max': 441,\n 'ha': 450,\n 'o': 'm -31 487 b -1 488 -21 488 -10 488 b 434 104 216 488 397 330 b 441 27 438 79 441 47 b 439 12 441 20 439 15 b 419 0 435 4 427 0 b 404 5 413 0 408 1 b 398 30 400 11 398 13 b 0 351 390 213 213 351 b -59 348 -20 351 -39 349 b -400 30 -251 324 -393 191 b -405 5 -400 13 -401 11 b -420 0 -409 1 -415 0 b -441 12 -428 0 -436 4 b -442 27 -441 15 -442 20 b -435 104 -442 47 -439 79 b -31 487 -401 316 -235 474 m -13 131 b -1 133 -9 133 -5 133 b 51 105 19 133 39 123 b 61 70 58 95 61 83 b 51 34 61 58 58 45 b -1 6 39 16 19 6 b -46 27 -17 6 -34 13 b -62 69 -57 38 -62 54 b -13 131 -62 98 -44 124 '\n },\n 'fermataBelow': {\n 'x_min': -441,\n 'x_max': 439.640625,\n 'ha': 449,\n 'o': 'm -428 -2 b -421 0 -427 -1 -424 0 b -406 -6 -416 0 -409 -2 b -400 -31 -401 -12 -400 -15 b -1 -352 -392 -215 -215 -352 b 58 -349 19 -352 38 -351 b 398 -31 250 -326 392 -192 b 404 -6 398 -15 400 -12 b 419 -1 408 -2 413 -1 b 439 -13 427 -1 435 -5 b 439 -29 439 -16 439 -22 b 434 -105 439 -48 438 -80 b 0 -489 397 -333 213 -489 b -68 -484 -23 -489 -44 -488 b -441 -36 -280 -452 -436 -263 b -441 -30 -441 -34 -441 -31 b -428 -2 -441 -11 -439 -5 m -13 -9 b -1 -8 -9 -8 -5 -8 b 50 -36 19 -8 39 -19 b 61 -72 57 -47 61 -59 b 50 -106 61 -84 57 -97 b -1 -134 39 -124 19 -134 b -46 -115 -17 -134 -34 -129 b -62 -72 -57 -102 -62 -87 b -13 -9 -62 -44 -44 -16 '\n },\n 'breathMarkComma': {\n 'x_min': -1.359375,\n 'x_max': 193.28125,\n 'ha': 197,\n 'o': 'm 78 233 b 87 233 81 233 84 233 b 187 140 132 233 174 195 b 193 102 190 127 193 115 b 43 -113 193 22 136 -62 b 27 -119 36 -116 31 -119 b 19 -108 21 -119 19 -115 b 29 -97 19 -102 20 -101 b 102 13 73 -72 102 -27 b 92 51 102 26 98 40 l 91 54 l 84 54 b 8 104 53 54 21 74 b -1 142 1 116 -1 130 b 78 233 -1 187 31 227 '\n },\n 'breathMarkUpbow': {\n 'x_min': -170.140625,\n 'x_max': 168.78125,\n 'ha': 172,\n 'o': 'm -160 567 b -122 567 -159 567 -149 567 l -87 567 l -84 566 b -74 553 -78 563 -77 560 b -20 366 -73 551 -49 466 b 31 186 8 267 31 186 b 85 371 31 186 55 269 b 140 559 114 473 138 557 b 153 567 141 564 148 567 b 168 559 159 567 166 564 b 168 555 168 557 168 557 b 92 281 168 548 159 513 b 14 13 50 134 14 13 b 0 0 14 6 6 0 b -17 15 -8 0 -17 8 b -93 283 -17 15 -51 136 b -170 552 -166 533 -170 548 b -170 553 -170 552 -170 552 b -160 567 -170 560 -167 564 '\n },\n 'caesura': {\n 'x_min': 0,\n 'x_max': 622.03125,\n 'ha': 635,\n 'o': 'm 398 417 b 406 419 401 419 404 419 b 427 398 417 419 427 409 b 427 391 427 395 427 392 b 34 -274 424 385 38 -272 b 20 -280 29 -278 25 -280 b 0 -259 9 -280 0 -270 b 0 -252 0 -256 0 -254 b 393 413 2 -247 389 410 b 398 417 394 415 397 416 m 592 417 b 600 419 594 419 597 419 b 622 398 611 419 622 409 b 620 391 622 395 620 392 b 227 -274 617 385 231 -272 b 213 -280 223 -278 219 -280 b 193 -259 202 -280 193 -270 b 194 -252 193 -256 193 -254 b 586 413 196 -247 582 410 b 592 417 588 415 590 416 '\n },\n 'caesuraCurved': {\n 'x_min': 0,\n 'x_max': 503.609375,\n 'ha': 514,\n 'o': 'm 274 430 b 277 430 276 430 277 430 b 310 394 296 430 310 415 b 308 383 310 391 308 387 b 306 367 307 381 307 374 b 236 120 298 305 272 210 b 40 -273 189 -5 125 -134 b 20 -287 35 -283 27 -287 b 5 -281 14 -287 9 -285 b 0 -267 1 -277 0 -273 b 9 -242 0 -262 2 -255 b 246 395 137 -12 232 242 b 274 430 249 416 257 427 m 468 430 b 472 430 469 430 470 430 b 503 394 490 430 503 415 b 502 383 503 391 503 387 b 499 367 502 381 500 374 b 431 120 491 305 465 210 b 234 -273 382 -5 318 -134 b 213 -287 228 -283 220 -287 b 198 -281 208 -287 202 -285 b 193 -267 194 -277 193 -273 b 202 -242 193 -262 196 -255 b 439 395 330 -12 426 242 b 468 430 442 416 451 427 '\n },\n 'restMaxima': {\n 'x_min': 0,\n 'x_max': 464.140625,\n 'ha': 474,\n 'o': 'm 0 0 l 0 347 l 76 347 l 153 347 l 153 0 l 153 -348 l 76 -348 l 0 -348 l 0 0 m 308 -1 l 308 347 l 386 347 l 464 347 l 464 -1 l 464 -348 l 386 -348 l 308 -348 l 308 -1 '\n },\n 'restDoubleWhole': {\n 'x_min': 0,\n 'x_max': 386.5625,\n 'ha': 394,\n 'o': 'm 0 173 l 0 347 l 193 347 l 386 347 l 386 173 l 386 0 l 193 0 l 0 0 l 0 173 '\n },\n 'restWhole': {\n 'x_min': 0,\n 'x_max': 447.8125,\n 'ha': 457,\n 'o': 'm 0 -87 l 0 0 l 223 0 l 447 0 l 447 -87 l 447 -174 l 223 -174 l 0 -174 l 0 -87 '\n },\n 'restHalf': {\n 'x_min': 0,\n 'x_max': 447.8125,\n 'ha': 457,\n 'o': 'm 0 86 l 0 173 l 223 173 l 447 173 l 447 86 l 447 0 l 223 0 l 0 0 l 0 86 '\n },\n 'restQuarter': {\n 'x_min': 0,\n 'x_max': 300.8125,\n 'ha': 307,\n 'o': 'm 49 505 b 53 506 50 505 51 506 b 70 496 58 506 62 503 b 81 485 73 492 78 488 l 96 473 l 111 459 l 122 449 l 134 438 l 182 396 l 255 330 b 292 291 292 298 292 298 l 292 290 l 292 284 l 283 270 b 209 36 234 197 209 113 b 288 -170 209 -44 235 -119 b 299 -184 295 -179 299 -181 b 300 -191 300 -187 300 -188 b 285 -206 300 -199 294 -206 b 280 -206 283 -206 281 -206 b 247 -201 270 -202 259 -201 b 176 -222 223 -201 197 -208 b 114 -340 136 -249 114 -292 b 172 -471 114 -384 134 -433 b 185 -492 182 -481 185 -487 b 181 -502 185 -496 183 -499 b 171 -508 176 -505 174 -508 b 152 -498 166 -508 160 -503 b 0 -284 65 -428 12 -352 b 0 -260 0 -278 0 -270 b 1 -238 0 -252 0 -242 b 148 -140 16 -177 73 -140 b 209 -148 167 -140 189 -142 b 215 -149 212 -148 215 -149 b 215 -149 215 -149 215 -149 l 215 -149 b 201 -136 215 -148 209 -142 l 157 -97 l 96 -41 b 17 34 21 24 17 29 b 17 37 17 36 17 36 b 17 38 17 37 17 38 b 25 56 17 44 17 44 b 110 298 81 131 110 219 b 46 474 110 367 88 431 b 38 491 40 480 38 487 b 49 505 38 498 42 502 '\n },\n 'rest8th': {\n 'x_min': 0,\n 'x_max': 349.8125,\n 'ha': 357,\n 'o': 'm 88 302 b 103 303 93 302 98 303 b 202 224 149 303 191 270 b 205 199 204 216 205 208 b 178 129 205 173 196 147 l 175 126 l 182 127 b 307 249 236 142 284 190 b 313 259 308 254 311 258 b 329 267 317 265 323 267 b 349 247 340 267 349 259 b 201 -263 349 242 204 -258 b 182 -273 197 -270 190 -273 b 163 -260 174 -273 166 -269 b 161 -256 161 -259 161 -258 b 217 -59 161 -248 170 -220 b 272 129 247 43 272 127 b 272 129 272 129 272 129 b 264 122 272 129 268 126 b 140 80 227 94 183 80 b 36 115 102 80 65 91 b 0 194 10 136 0 165 b 88 302 0 244 32 292 '\n },\n 'rest16th': {\n 'x_min': 0,\n 'x_max': 450.53125,\n 'ha': 460,\n 'o': 'm 189 302 b 204 303 193 302 198 303 b 303 224 250 303 292 270 b 306 199 304 216 306 208 b 279 129 306 173 296 147 l 276 126 l 281 127 b 408 249 337 142 385 190 b 412 259 409 254 412 258 b 430 267 417 265 423 267 b 450 247 441 267 450 259 b 200 -605 450 242 204 -599 b 182 -616 197 -612 190 -616 b 163 -602 174 -616 166 -610 b 161 -598 161 -601 161 -601 b 217 -402 161 -589 170 -562 b 272 -213 247 -298 272 -213 b 272 -213 272 -213 272 -213 b 264 -219 272 -213 268 -216 b 140 -262 227 -247 182 -262 b 36 -226 102 -262 65 -249 b 0 -145 12 -206 0 -176 b 17 -84 0 -124 5 -104 b 103 -38 38 -54 70 -38 b 191 -91 137 -38 172 -56 b 205 -141 201 -106 205 -124 b 178 -212 205 -167 196 -194 l 175 -215 l 182 -213 b 307 -93 236 -198 284 -151 b 372 129 308 -88 372 127 b 372 129 372 129 372 129 b 364 122 372 129 368 126 b 240 80 328 94 283 80 b 137 115 202 80 166 91 b 99 194 111 136 99 165 b 189 302 99 244 133 292 '\n },\n 'rest32nd': {\n 'x_min': 0,\n 'x_max': 551.25,\n 'ha': 563,\n 'o': 'm 289 644 b 304 645 294 645 299 645 b 404 566 349 645 392 613 b 406 541 405 557 406 549 b 379 471 406 514 397 489 l 377 467 l 382 470 b 509 591 438 485 485 531 b 513 601 510 595 513 599 b 530 609 518 607 524 609 b 551 588 540 609 551 602 b 200 -605 551 584 204 -599 b 182 -616 197 -612 190 -616 b 163 -602 174 -616 166 -610 b 161 -598 161 -601 161 -601 b 217 -402 161 -589 170 -562 b 272 -213 247 -298 272 -213 b 272 -213 272 -213 272 -213 b 264 -219 272 -213 268 -216 b 140 -262 227 -247 182 -262 b 36 -226 102 -262 65 -249 b 0 -145 12 -206 0 -176 b 17 -84 0 -124 5 -104 b 103 -38 38 -54 70 -38 b 191 -91 137 -38 172 -56 b 205 -141 201 -106 205 -124 b 178 -212 205 -167 196 -194 l 175 -215 l 182 -213 b 307 -93 236 -198 284 -151 b 372 129 308 -88 372 127 b 372 129 372 129 372 129 b 364 122 372 129 368 126 b 240 80 328 94 283 80 b 137 115 202 80 166 91 b 99 195 112 136 99 165 b 118 256 99 217 106 238 b 204 303 138 287 171 303 b 292 249 238 303 273 285 b 306 199 302 234 306 217 b 279 129 306 173 296 148 l 276 126 l 281 127 b 408 248 336 142 385 190 b 473 470 409 254 473 469 b 473 470 473 470 473 470 b 465 464 473 470 469 467 b 341 421 428 435 383 421 b 236 458 303 421 266 433 b 200 537 212 478 200 508 b 289 644 200 585 234 635 '\n },\n 'rest64th': {\n 'x_min': -1.359375,\n 'x_max': 651.96875,\n 'ha': 665,\n 'o': 'm 389 644 b 405 645 394 645 400 645 b 504 566 450 645 492 613 b 507 541 506 557 507 549 b 480 471 507 514 498 489 l 477 467 l 483 470 b 609 591 539 485 586 531 b 613 601 611 595 613 599 b 631 609 619 607 624 609 b 651 588 641 609 651 602 b 200 -946 651 584 204 -941 b 182 -957 197 -953 190 -957 b 163 -945 174 -957 166 -953 b 161 -939 161 -942 161 -942 b 217 -743 161 -931 170 -904 b 272 -555 247 -639 272 -555 b 272 -555 272 -555 272 -555 b 264 -560 272 -555 268 -557 b 140 -603 227 -589 182 -603 b 36 -567 102 -603 65 -592 b -1 -487 12 -548 -1 -517 b 17 -427 -1 -466 5 -445 b 103 -380 38 -395 70 -380 b 191 -433 137 -380 172 -398 b 205 -484 201 -448 205 -466 b 178 -553 205 -509 196 -535 l 175 -557 l 182 -555 b 307 -435 236 -539 284 -494 b 372 -213 308 -430 372 -215 b 372 -213 372 -213 372 -213 b 364 -219 372 -213 368 -216 b 240 -262 328 -247 283 -262 b 137 -226 202 -262 166 -249 b 99 -145 112 -206 99 -176 b 118 -84 99 -124 106 -104 b 204 -38 138 -54 171 -38 b 292 -91 238 -38 273 -56 b 306 -141 302 -106 306 -124 b 279 -212 306 -167 296 -194 l 276 -215 l 281 -213 b 408 -93 336 -198 385 -151 b 473 129 409 -88 473 127 b 473 129 473 129 473 129 b 465 122 473 129 469 126 b 341 80 428 94 383 80 b 236 115 303 80 266 91 b 200 195 213 136 200 165 b 217 256 200 217 206 238 b 304 303 239 287 272 303 b 393 249 338 303 374 285 b 406 199 402 234 406 217 b 379 129 406 173 397 148 l 377 126 l 382 127 b 509 248 436 142 485 190 b 574 470 510 254 574 469 b 574 470 574 470 574 470 b 566 464 574 470 570 467 b 442 421 529 435 484 421 b 337 458 404 421 367 433 b 300 537 313 478 300 508 b 389 644 300 585 334 635 '\n },\n 'rest128th': {\n 'x_min': -1.359375,\n 'x_max': 752.703125,\n 'ha': 768,\n 'o': 'm 490 985 b 504 986 495 986 500 986 b 604 907 551 986 593 954 b 607 884 607 900 607 892 b 581 813 607 857 597 831 l 578 810 l 583 811 b 710 932 638 827 687 873 b 714 943 711 936 713 942 b 730 952 720 949 725 952 b 752 931 741 952 752 943 b 200 -946 752 927 204 -941 b 182 -957 197 -953 190 -957 b 163 -945 174 -957 166 -953 b 161 -939 161 -942 161 -942 b 217 -743 161 -931 170 -904 b 272 -555 247 -639 272 -555 b 272 -555 272 -555 272 -555 b 264 -560 272 -555 268 -557 b 140 -603 227 -589 182 -603 b 36 -567 102 -603 65 -592 b -1 -487 12 -548 -1 -517 b 17 -427 -1 -466 5 -445 b 103 -380 38 -395 70 -380 b 191 -433 137 -380 172 -398 b 205 -484 201 -448 205 -466 b 178 -553 205 -509 196 -535 l 175 -557 l 182 -555 b 307 -435 236 -539 284 -494 b 372 -213 308 -430 372 -215 b 372 -213 372 -213 372 -213 b 364 -219 372 -213 368 -216 b 240 -262 328 -247 283 -262 b 137 -226 202 -262 166 -249 b 99 -145 112 -206 99 -176 b 118 -84 99 -124 106 -104 b 204 -38 138 -54 171 -38 b 292 -91 238 -38 273 -56 b 306 -141 302 -106 306 -124 b 279 -212 306 -167 296 -194 l 276 -215 l 281 -213 b 408 -93 336 -198 385 -151 b 473 129 409 -88 473 127 b 473 129 473 129 473 129 b 465 122 473 129 469 126 b 341 80 428 94 383 80 b 236 115 303 80 266 91 b 200 195 213 136 200 165 b 217 256 200 217 206 238 b 304 303 239 287 272 303 b 393 249 338 303 374 285 b 406 199 402 234 406 217 b 379 129 406 173 397 148 l 377 126 l 382 127 b 509 248 436 142 485 190 b 574 470 510 254 574 469 b 574 470 574 470 574 470 b 566 464 574 470 570 467 b 442 421 529 435 484 421 b 337 458 404 421 367 433 b 300 538 314 477 300 508 b 318 598 300 559 306 580 b 404 645 340 630 372 645 b 494 592 439 645 475 627 b 507 541 502 577 507 559 b 480 471 507 516 498 489 l 477 467 l 483 470 b 608 589 537 485 586 531 b 675 811 611 595 675 810 b 675 811 675 811 675 811 b 666 806 675 811 671 809 b 543 763 628 777 585 763 b 438 799 504 763 468 775 b 401 878 412 820 401 849 b 490 985 401 928 434 977 '\n },\n 'dynamicPiano': {\n 'x_min': -53.078125,\n 'x_max': 513.140625,\n 'ha': 485,\n 'o': 'm 185 383 b 196 384 187 383 191 384 b 277 334 230 384 259 365 b 288 301 281 324 288 306 b 288 297 288 298 288 297 b 294 302 289 297 291 299 b 394 370 323 338 367 367 b 404 371 398 370 401 371 b 510 272 453 371 498 328 b 513 237 513 262 513 251 b 507 172 513 217 511 192 b 326 -34 487 59 412 -26 b 314 -36 322 -36 318 -36 b 274 -24 298 -36 283 -31 l 265 -16 b 224 44 246 -1 232 20 b 223 49 224 47 223 49 b 223 49 223 49 223 49 b 149 -197 221 48 149 -194 b 149 -198 149 -197 149 -198 b 170 -210 149 -202 155 -205 b 187 -215 174 -210 175 -212 b 204 -231 201 -219 204 -222 b 197 -245 204 -240 202 -242 l 194 -248 l 76 -248 l -42 -248 l -46 -245 b -53 -231 -51 -242 -53 -240 b -35 -215 -53 -222 -49 -217 b -13 -210 -21 -212 -20 -212 b -6 -208 -10 -209 -8 -208 b 0 -206 -6 -208 -2 -206 b 25 -188 13 -201 21 -195 b 163 280 28 -183 163 276 b 166 291 163 283 164 287 b 167 302 167 295 167 299 b 155 324 167 315 161 324 b 155 324 155 324 155 324 b 65 230 125 322 85 280 b 53 215 61 217 58 215 b 51 215 53 215 51 215 b 42 224 46 215 42 217 b 57 263 42 231 47 244 b 140 360 77 305 104 337 b 152 370 144 365 149 369 b 185 383 157 376 172 381 m 374 306 b 366 308 371 308 368 308 b 300 273 348 308 321 294 b 284 254 288 262 287 259 b 280 242 283 249 281 245 b 257 169 279 240 270 213 l 236 98 l 236 93 b 251 48 238 77 243 61 b 279 27 258 37 272 27 b 281 27 279 27 280 27 b 291 31 281 27 287 30 b 396 170 334 52 378 109 b 406 247 402 197 406 224 b 401 277 406 259 405 270 b 374 306 397 290 383 303 '\n },\n 'dynamicMezzo': {\n 'x_min': 46.28125,\n 'x_max': 669.671875,\n 'ha': 563,\n 'o': 'm 183 376 b 189 376 185 376 187 376 b 212 374 197 376 208 376 b 265 337 234 369 253 355 b 274 317 268 331 273 320 b 274 316 274 317 274 316 b 280 323 276 316 276 319 b 311 358 288 337 299 348 b 319 366 315 360 318 365 b 356 376 326 373 340 376 b 382 371 364 376 374 374 b 428 337 400 366 417 352 b 436 317 431 331 436 320 b 438 316 436 317 436 316 b 442 323 438 316 439 319 b 475 358 451 337 462 348 b 483 366 477 360 481 365 b 518 376 488 373 503 376 b 544 373 528 376 536 376 b 604 285 579 360 604 326 b 597 249 604 273 601 258 b 543 63 596 247 544 70 b 541 54 543 61 541 55 b 540 44 540 51 540 47 b 552 23 540 33 545 23 b 552 23 552 23 552 23 b 647 126 586 29 627 72 b 658 138 651 136 653 138 b 660 138 660 138 660 138 b 669 129 666 137 669 136 b 654 88 669 122 665 109 b 562 -12 631 43 602 9 l 549 -19 b 521 -27 540 -24 530 -27 b 447 30 490 -27 458 -4 b 443 58 445 38 443 48 b 450 93 443 72 446 84 b 504 278 453 97 504 272 b 507 288 506 283 506 287 b 509 298 507 292 509 295 b 491 326 509 310 502 320 b 487 327 490 327 488 327 b 479 324 484 327 483 326 b 441 270 462 316 443 288 b 435 249 441 265 436 254 b 398 127 434 248 419 195 b 362 4 379 61 362 5 b 328 -1 359 -1 362 -1 b 314 -1 323 -1 319 -1 b 302 -1 310 -1 306 -1 b 266 4 266 -1 269 -1 b 265 6 265 5 265 5 b 303 144 265 13 272 34 b 343 278 325 216 343 276 b 344 288 343 281 344 285 b 345 298 345 291 345 295 b 330 326 345 310 340 320 b 323 327 328 327 325 327 b 317 324 322 327 321 326 b 279 270 300 316 281 288 b 273 249 279 265 274 254 b 236 127 272 248 255 195 b 200 4 216 61 200 5 b 164 -1 197 -1 198 -1 b 151 -1 161 -1 156 -1 b 140 -1 147 -1 142 -1 b 103 4 104 -1 106 -1 b 103 6 103 5 103 5 b 141 144 103 13 108 34 b 181 278 161 216 179 276 b 182 288 181 281 181 285 b 183 298 182 291 183 295 b 168 324 183 310 178 320 b 160 327 166 326 163 327 b 141 320 156 327 151 324 b 69 230 112 305 85 272 b 57 215 65 217 62 215 b 55 215 57 215 55 215 b 46 224 49 215 46 217 b 59 260 46 231 50 242 b 151 363 81 306 112 341 b 161 369 155 365 160 367 b 183 376 166 371 174 374 '\n },\n 'dynamicForte': {\n 'x_min': -118.421875,\n 'x_max': 597.53125,\n 'ha': 381,\n 'o': 'm 460 574 b 464 574 461 574 462 574 b 488 574 470 574 481 574 b 500 573 491 574 498 574 b 594 503 543 570 588 538 b 597 488 596 498 597 494 b 528 417 597 449 564 417 b 502 423 519 417 510 419 b 465 481 477 434 465 458 b 488 528 465 499 472 516 b 490 530 490 530 490 530 b 490 530 490 530 490 530 b 468 517 488 530 475 523 b 349 340 419 485 377 420 b 347 330 348 334 347 330 b 383 328 347 328 363 328 b 428 326 423 328 424 328 b 442 302 438 320 442 312 b 430 281 442 294 438 285 b 385 276 424 277 426 276 l 377 276 l 332 276 l 330 269 b 178 -117 303 126 250 -9 b 1 -249 129 -194 69 -237 b -20 -251 -6 -251 -13 -251 b -114 -187 -65 -251 -100 -227 b -118 -156 -117 -177 -118 -166 b -51 -84 -118 -116 -91 -84 b -31 -87 -46 -84 -39 -86 b 16 -152 0 -95 16 -124 b -12 -205 16 -173 8 -194 b -16 -208 -14 -206 -16 -208 b -14 -208 -16 -208 -14 -208 b -9 -206 -14 -208 -12 -208 b 74 -124 23 -197 54 -166 b 172 224 98 -79 125 22 b 185 276 178 252 183 274 b 185 276 185 276 185 276 b 141 276 185 276 181 276 b 91 280 96 276 96 276 b 77 302 83 285 77 294 b 91 326 77 312 83 320 b 148 328 95 328 96 328 l 198 330 l 202 341 b 460 574 249 473 351 566 '\n },\n 'dynamicRinforzando': {\n 'x_min': 78.9375,\n 'x_max': 485.921875,\n 'ha': 417,\n 'o': 'm 362 378 b 378 380 367 380 372 380 b 472 348 415 380 453 367 b 485 315 481 338 485 327 b 462 273 485 298 477 281 b 439 267 454 269 446 267 b 398 290 424 267 409 274 b 344 319 385 309 364 319 b 281 269 315 319 289 301 b 279 262 280 266 279 262 b 276 256 279 260 277 258 b 274 249 276 254 274 251 b 238 127 273 248 257 192 b 201 4 217 61 201 5 b 166 -1 198 -1 200 -1 b 153 -1 163 -1 157 -1 b 141 -1 148 -1 144 -1 b 104 4 106 -1 107 -1 b 104 6 104 5 104 5 b 142 144 104 13 110 34 b 182 278 164 219 181 276 b 183 288 182 281 182 285 b 185 302 185 292 185 298 b 164 330 185 317 176 328 b 159 330 163 330 161 330 b 102 302 140 330 119 320 b 91 294 95 295 93 294 b 88 294 91 294 89 294 b 78 303 83 294 78 298 b 81 312 78 306 78 309 b 200 373 106 347 160 373 b 215 371 205 373 209 371 b 266 335 235 367 254 353 b 269 331 268 333 269 331 b 269 331 269 331 269 331 b 273 335 269 331 270 334 b 362 378 298 359 330 376 '\n },\n 'dynamicSforzando': {\n 'x_min': 70.78125,\n 'x_max': 378.390625,\n 'ha': 315,\n 'o': 'm 246 373 b 254 373 249 373 251 373 b 372 324 303 373 360 351 b 378 302 377 317 378 309 b 338 251 378 278 362 255 b 328 249 334 249 332 249 b 283 294 303 249 283 270 b 288 315 283 301 284 308 b 289 319 289 317 289 319 b 289 319 289 319 289 319 b 283 320 289 320 287 320 b 270 322 279 322 274 322 b 206 288 242 322 215 308 b 206 283 206 287 206 285 b 257 223 206 267 230 238 b 284 206 272 213 277 210 b 351 90 328 173 351 130 b 340 47 351 74 348 59 b 205 -30 314 -2 264 -30 b 182 -29 198 -30 190 -30 b 84 15 147 -24 103 -5 b 70 48 74 24 70 36 b 108 99 70 70 85 94 b 121 102 112 101 117 102 b 167 56 147 102 167 80 b 159 31 167 48 164 40 l 156 26 l 157 26 b 190 20 167 22 178 20 b 220 26 201 20 212 22 b 258 65 243 34 258 51 b 257 70 258 66 258 69 b 204 126 249 94 234 109 b 114 258 148 158 114 209 b 125 302 114 273 118 288 b 246 373 147 342 193 370 '\n },\n 'dynamicZ': {\n 'x_min': 29.9375,\n 'x_max': 420.578125,\n 'ha': 371,\n 'o': 'm 115 345 b 221 347 117 345 166 347 b 411 345 306 347 409 345 b 420 330 416 342 420 335 b 415 319 420 326 419 321 b 178 118 397 303 179 118 b 178 117 178 118 178 117 b 181 117 178 117 178 117 b 189 117 182 117 185 117 b 193 117 190 117 191 117 b 247 98 215 117 232 111 b 296 75 266 83 280 76 b 302 75 299 75 300 75 b 322 91 311 75 315 79 b 322 91 322 91 322 91 b 322 91 322 91 322 91 b 319 91 322 91 321 91 b 313 90 318 90 315 90 b 283 107 300 90 288 97 b 277 126 279 114 277 121 b 319 167 277 149 295 167 b 319 167 319 167 319 167 b 362 118 347 167 362 147 b 355 82 362 108 359 96 b 311 33 349 65 340 55 b 224 1 284 12 253 1 b 194 5 213 1 204 2 b 168 18 183 8 178 11 b 110 36 151 30 130 36 b 57 15 88 36 68 29 b 47 11 54 12 51 11 b 31 20 40 11 34 13 b 29 26 31 22 29 25 b 68 66 29 36 39 45 b 285 250 73 71 281 248 b 285 250 285 250 285 250 b 231 252 285 252 261 252 b 137 250 190 252 141 250 b 93 227 122 248 110 241 b 78 220 88 222 83 220 b 66 227 74 220 70 222 b 63 234 65 229 63 231 b 85 291 63 241 69 252 b 115 345 108 342 108 344 '\n },\n 'ornamentTrill': {\n 'x_min': -340.28125,\n 'x_max': 338.921875,\n 'ha': 346,\n 'o': 'm -32 520 b -29 521 -31 520 -31 521 b -23 519 -27 521 -24 520 b -20 513 -21 517 -20 516 b -21 506 -20 512 -20 509 b -31 474 -23 502 -27 488 l -53 402 l -66 352 l -68 349 l -57 349 b -32 351 -51 349 -40 351 b 123 370 19 352 74 359 b 137 371 127 370 133 371 b 170 356 152 371 164 366 b 171 355 170 355 170 355 b 216 366 174 355 183 358 b 280 378 268 377 266 377 b 287 378 283 378 284 378 b 332 349 307 378 322 369 b 338 319 336 341 338 330 b 332 301 338 310 336 302 b 242 280 329 299 246 280 b 242 280 242 280 242 280 b 235 288 236 280 235 283 b 235 292 235 290 235 291 b 236 302 236 297 236 299 b 220 337 236 316 230 330 l 216 340 l 210 335 b 159 276 189 322 172 301 b 118 149 152 265 156 274 b 81 34 84 36 85 36 b -8 13 78 33 -4 13 b -8 13 -8 13 -8 13 b -14 20 -12 15 -14 15 b -8 44 -14 24 -12 31 b -2 66 -5 55 -2 65 b -2 66 -2 66 -2 66 l -2 66 b -43 41 -2 66 -21 55 b -114 4 -98 8 -98 8 b -144 0 -123 0 -134 0 b -242 99 -197 0 -242 43 b -242 109 -242 102 -242 105 b -212 219 -240 122 -242 116 b -185 312 -197 270 -185 312 l -185 312 b -189 312 -185 312 -186 312 b -259 312 -200 312 -227 312 b -321 310 -291 312 -310 310 b -334 312 -330 310 -334 312 b -340 319 -338 313 -340 316 b -336 326 -340 322 -338 324 b -291 337 -334 326 -314 331 l -247 347 l -210 348 b -172 348 -190 348 -172 348 b -168 363 -172 348 -171 355 b -145 442 -151 424 -145 441 b -133 452 -144 444 -140 446 l -77 489 b -32 520 -53 506 -32 520 m 57 334 b 53 335 55 335 54 335 b 44 334 50 335 49 335 b -70 316 8 326 -28 320 b -78 309 -78 316 -78 316 b -108 202 -80 305 -88 274 b -141 81 -136 112 -141 93 b -140 74 -141 79 -141 77 b -117 49 -137 59 -127 49 b -107 52 -114 49 -110 51 b 16 127 -106 54 14 126 b 42 217 16 127 42 215 b 49 241 42 222 44 229 b 73 320 53 251 73 317 b 57 334 73 327 65 333 '\n },\n 'ornamentTurn': {\n 'x_min': -423.3125,\n 'x_max': 421.9375,\n 'ha': 431,\n 'o': 'm -262 197 b -247 197 -257 197 -253 197 b -118 162 -210 197 -163 184 b 40 45 -61 134 -13 98 b 277 -95 119 -33 200 -81 b 289 -97 281 -97 285 -97 b 378 0 332 -97 371 -55 b 378 11 378 4 378 6 b 302 83 378 55 345 83 b 242 66 283 83 262 77 b 208 56 231 59 219 56 b 148 120 175 56 148 81 b 201 186 148 151 164 172 b 261 198 220 194 240 198 b 420 45 341 198 411 136 b 421 22 421 37 421 29 b 245 -199 421 -93 338 -199 b 238 -198 243 -199 240 -199 b -44 -47 148 -194 50 -141 b -250 86 -114 22 -183 66 b -295 94 -270 91 -283 94 b -315 91 -302 94 -307 94 b -381 4 -356 81 -381 43 b -355 -56 -381 -18 -372 -40 b -298 -81 -338 -73 -319 -81 b -246 -68 -283 -81 -265 -77 b -212 -58 -234 -61 -223 -58 b -178 -69 -200 -58 -189 -62 b -151 -122 -160 -81 -151 -101 b -171 -167 -151 -138 -157 -155 b -239 -195 -185 -181 -213 -192 b -257 -197 -245 -197 -250 -197 b -423 -5 -352 -197 -423 -109 b -412 65 -423 16 -419 40 b -262 197 -389 137 -329 188 '\n },\n 'ornamentTurnSlash': {\n 'x_min': -423.3125,\n 'x_max': 421.9375,\n 'ha': 431,\n 'o': 'm -10 276 b -2 277 -8 277 -5 277 b 17 265 5 277 13 273 b 19 163 19 260 19 260 l 19 68 l 39 45 b 277 -95 122 -34 200 -81 b 289 -97 281 -97 285 -97 b 378 0 332 -97 371 -54 b 378 11 378 4 378 6 b 302 83 378 55 345 83 b 242 66 283 83 262 77 b 208 56 231 59 219 56 b 148 120 175 56 148 81 b 200 186 148 151 164 172 b 261 198 220 194 240 198 b 420 45 341 198 411 137 b 421 22 421 37 421 29 b 257 -198 421 -86 347 -188 b 242 -198 251 -198 247 -198 b 20 -105 181 -198 95 -163 l 19 -104 l 19 -183 b 19 -216 19 -195 19 -206 b 12 -273 19 -272 17 -267 b -2 -278 8 -277 2 -278 b -21 -266 -10 -278 -19 -274 b -23 -165 -23 -263 -23 -262 l -23 -69 l -44 -47 b -250 86 -117 23 -183 66 b -295 94 -270 93 -284 94 b -315 91 -302 94 -308 94 b -381 5 -356 81 -381 43 b -355 -56 -381 -16 -372 -40 b -299 -81 -338 -73 -319 -81 b -246 -68 -283 -81 -265 -77 b -212 -58 -234 -61 -223 -58 b -168 -77 -196 -58 -179 -65 b -151 -122 -156 -90 -151 -105 b -179 -174 -151 -141 -160 -162 b -239 -195 -194 -184 -217 -192 b -257 -197 -245 -195 -250 -197 b -423 -5 -349 -197 -423 -113 b -423 0 -423 -4 -423 -1 b -277 194 -420 97 -362 173 b -247 197 -268 197 -258 197 b -24 104 -185 197 -100 162 l -23 102 l -23 181 b -21 265 -23 260 -23 260 b -10 276 -20 269 -14 274 '\n },\n 'ornamentMordent': {\n 'x_min': -402.890625,\n 'x_max': 401.53125,\n 'ha': 410,\n 'o': 'm -10 273 b -4 274 -9 273 -6 274 b 16 262 4 274 12 269 b 17 158 17 259 17 259 l 17 56 l 62 112 b 117 174 110 172 110 172 b 122 174 118 174 119 174 b 132 173 125 174 129 173 b 295 11 134 172 171 134 l 307 -1 l 336 34 b 374 76 366 72 368 74 b 381 77 375 77 378 77 b 401 56 392 77 401 68 b 400 48 401 54 401 51 b 223 -172 397 41 230 -166 b 210 -176 220 -174 215 -176 b 201 -174 206 -176 204 -176 b 112 -87 198 -173 178 -152 b 27 0 65 -38 27 0 b 21 -6 27 0 24 -2 l 17 -12 l 17 -147 b 17 -210 17 -173 17 -194 b 10 -292 17 -297 16 -287 b -2 -299 6 -297 2 -299 b -21 -287 -10 -299 -19 -295 b -24 -174 -23 -284 -23 -284 l -24 -63 l -66 -117 b -121 -176 -110 -170 -114 -176 b -125 -176 -122 -176 -123 -176 b -296 -12 -134 -174 -125 -184 l -308 0 l -337 -34 b -375 -77 -367 -73 -370 -76 b -382 -79 -377 -79 -379 -79 b -402 -58 -393 -79 -402 -69 b -401 -49 -402 -55 -402 -52 b -224 170 -398 -43 -231 165 b -212 174 -221 173 -216 174 b -202 173 -208 174 -205 174 b -39 11 -200 172 -151 122 l -28 -1 l -25 1 l -24 4 l -24 130 b -23 260 -24 256 -24 258 b -10 273 -20 266 -16 270 '\n },\n 'ornamentShortTrill': {\n 'x_min': -402.890625,\n 'x_max': 401.53125,\n 'ha': 410,\n 'o': 'm -219 173 b -213 174 -217 174 -215 174 b -202 173 -209 174 -205 173 b -114 86 -200 172 -179 151 b -28 0 -66 37 -28 0 b 40 84 -28 0 2 37 b 117 174 111 173 110 172 b 122 174 118 174 119 174 b 132 173 125 174 129 173 b 295 11 134 172 171 134 l 307 -1 l 336 34 b 374 76 366 72 368 74 b 381 77 375 77 378 77 b 401 56 392 77 401 68 b 400 48 401 54 401 51 b 223 -172 397 41 230 -166 b 210 -176 220 -174 215 -176 b 201 -174 206 -176 204 -176 b 112 -87 198 -173 178 -152 b 27 0 65 -38 27 0 b -42 -86 27 0 -4 -38 b -118 -174 -112 -174 -111 -173 b -123 -176 -119 -176 -121 -176 b -133 -174 -126 -176 -130 -174 b -296 -12 -136 -173 -172 -137 l -308 0 l -337 -34 b -375 -77 -367 -73 -370 -76 b -382 -79 -377 -79 -379 -79 b -402 -58 -393 -79 -402 -69 b -401 -49 -402 -55 -402 -52 b -224 172 -398 -43 -228 167 b -219 173 -223 172 -220 173 '\n },\n 'ornamentTremblement': {\n 'x_min': -571.671875,\n 'x_max': 570.3125,\n 'ha': 582,\n 'o': 'm -386 173 b -381 174 -385 174 -383 174 b -370 173 -377 174 -372 173 b -281 86 -367 172 -347 151 b -196 0 -235 37 -196 0 b -126 84 -196 0 -164 37 b -50 174 -55 173 -57 172 b -44 174 -49 174 -47 174 b -35 173 -42 174 -38 173 b 53 86 -32 172 -12 151 b 138 0 100 37 138 0 b 208 84 140 0 170 37 b 284 174 279 173 277 172 b 289 174 285 174 288 174 b 299 173 294 174 298 173 b 462 11 303 172 338 134 l 475 -1 l 503 34 b 541 76 534 72 536 74 b 548 77 544 77 545 77 b 570 56 560 77 570 68 b 567 48 570 54 568 51 b 392 -172 564 41 397 -166 b 378 -176 387 -174 382 -176 b 368 -174 374 -176 371 -176 b 280 -87 367 -173 345 -152 b 194 0 234 -38 194 0 b 125 -86 194 0 163 -38 b 49 -174 54 -174 55 -173 b 43 -176 47 -176 46 -176 b 34 -174 40 -176 36 -174 b -54 -87 31 -173 10 -152 b -140 0 -102 -38 -140 0 b -209 -86 -141 0 -171 -38 b -285 -174 -280 -174 -279 -173 b -291 -176 -287 -176 -289 -176 b -300 -174 -295 -176 -299 -174 b -464 -12 -304 -173 -340 -137 l -476 0 l -504 -34 b -543 -77 -534 -73 -537 -76 b -549 -79 -545 -79 -547 -79 b -571 -58 -562 -79 -571 -69 b -568 -49 -571 -55 -570 -52 b -392 172 -566 -43 -396 167 b -386 173 -390 172 -387 173 '\n },\n 'ornamentPrecompAppoggTrill': {\n 'x_min': -571.671875,\n 'x_max': 570.3125,\n 'ha': 582,\n 'o': 'm -559 351 b -551 352 -556 352 -553 352 b -530 338 -543 352 -533 348 b -529 169 -530 337 -529 291 l -529 1 l -507 27 l -441 112 b -382 174 -394 169 -390 174 b -378 174 -381 174 -379 174 b -281 86 -370 174 -375 179 b -196 0 -234 37 -196 0 b -126 84 -196 0 -164 37 b -50 174 -55 173 -57 172 b -44 174 -49 174 -47 174 b -35 173 -42 174 -38 173 b 53 86 -32 172 -12 151 b 138 0 100 37 138 0 b 208 84 140 0 170 37 b 284 174 279 173 279 172 b 289 174 285 174 288 174 b 300 173 294 174 298 173 b 462 11 303 172 340 134 l 475 -1 l 503 34 b 541 76 534 72 536 74 b 548 77 544 77 545 77 b 570 56 560 77 570 68 b 567 48 570 54 568 51 b 392 -172 564 41 397 -166 b 378 -176 387 -174 382 -176 b 368 -174 375 -176 371 -176 b 280 -87 367 -173 347 -152 b 194 0 234 -38 194 0 b 126 -86 194 0 163 -38 b 49 -174 54 -174 55 -173 b 44 -176 47 -176 46 -176 b 34 -174 40 -176 36 -174 b -54 -87 31 -173 10 -152 b -140 0 -102 -38 -140 0 b -209 -86 -140 0 -171 -38 b -285 -174 -280 -174 -279 -173 b -291 -176 -287 -176 -288 -176 b -300 -174 -294 -176 -298 -174 b -464 -11 -303 -173 -374 -102 l -476 0 l -506 -37 b -539 -76 -528 -65 -537 -74 b -551 -80 -543 -79 -547 -80 b -570 -68 -558 -80 -566 -76 l -571 -65 l -571 136 b -570 340 -571 331 -571 337 b -559 351 -568 344 -564 348 '\n },\n 'ornamentPrecompSlideTrillDAnglebert': {\n 'x_min': -590.71875,\n 'x_max': 589.359375,\n 'ha': 601,\n 'o': 'm -367 173 b -362 174 -366 174 -364 174 b -351 173 -357 174 -353 173 b -262 86 -348 172 -328 151 b -176 0 -216 37 -176 0 b -107 84 -176 0 -145 37 b -31 174 -36 173 -38 172 b -25 174 -29 174 -28 174 b -16 173 -23 174 -19 173 b 72 86 -13 172 6 151 b 157 0 119 37 157 0 b 227 84 159 0 189 37 b 303 174 298 173 296 172 b 308 174 304 174 307 174 b 318 173 313 174 317 173 b 481 11 322 172 357 134 l 494 -1 l 522 34 b 560 76 553 72 555 74 b 567 77 563 77 564 77 b 589 56 579 77 589 68 b 586 48 589 54 588 51 b 411 -172 583 41 416 -166 b 397 -176 406 -174 401 -176 b 387 -174 393 -176 390 -176 b 299 -87 386 -173 366 -152 b 213 0 253 -38 213 0 b 144 -86 213 0 182 -38 b 68 -174 73 -174 74 -173 b 62 -176 66 -176 65 -176 b 53 -174 59 -176 55 -174 b -35 -87 50 -173 29 -152 b -121 0 -83 -38 -121 0 b -190 -86 -122 0 -152 -38 b -266 -174 -261 -174 -259 -173 b -272 -176 -268 -176 -270 -176 b -281 -174 -276 -176 -280 -174 b -371 -86 -284 -173 -304 -152 b -457 0 -417 -38 -457 0 l -457 0 b -477 -26 -457 0 -470 -16 b -548 -227 -524 -88 -548 -161 b -536 -303 -548 -254 -544 -280 b -533 -317 -534 -309 -533 -313 b -553 -338 -533 -330 -541 -338 b -577 -315 -566 -338 -571 -333 b -590 -227 -586 -287 -590 -258 b -518 -9 -590 -154 -564 -77 b -465 56 -509 2 -504 8 l -402 134 b -367 173 -375 169 -372 172 '\n },\n 'ornamentPrecompSlideTrillBach': {\n 'x_min': -590.71875,\n 'x_max': 589.359375,\n 'ha': 601,\n 'o': 'm 175 273 b 182 274 178 273 181 274 b 202 262 190 274 198 269 b 204 158 204 259 204 259 l 204 56 l 250 112 b 303 174 296 172 298 172 b 308 174 304 174 307 174 b 318 173 313 174 317 173 b 481 11 322 172 357 134 l 494 -1 l 522 34 b 560 76 553 72 555 74 b 567 77 563 77 564 77 b 589 56 579 77 589 68 b 586 48 589 54 588 51 b 411 -172 583 41 416 -166 b 397 -176 406 -174 401 -176 b 387 -174 393 -176 390 -176 b 299 -87 386 -173 366 -152 b 213 0 253 -38 213 0 b 208 -6 213 0 210 -2 l 204 -12 l 204 -147 b 204 -210 204 -173 204 -194 b 198 -292 204 -297 204 -287 b 183 -299 194 -297 189 -299 b 164 -287 175 -299 167 -295 b 163 -174 163 -284 163 -284 l 161 -63 l 119 -117 b 65 -176 76 -170 73 -176 b 61 -176 63 -176 62 -176 b -35 -87 51 -174 57 -180 b -121 0 -83 -38 -121 0 b -190 -86 -122 0 -152 -38 b -266 -174 -261 -174 -259 -173 b -272 -176 -268 -176 -270 -176 b -281 -174 -276 -176 -280 -174 b -371 -86 -284 -173 -304 -152 b -457 0 -417 -38 -457 0 l -457 0 b -477 -26 -457 0 -470 -16 b -548 -227 -524 -88 -548 -161 b -536 -303 -548 -254 -544 -280 b -533 -317 -534 -309 -533 -313 b -553 -338 -533 -330 -541 -338 b -577 -315 -566 -338 -571 -333 b -590 -227 -586 -287 -590 -258 b -518 -9 -590 -154 -564 -77 b -465 56 -509 2 -504 8 l -402 134 b -363 174 -374 170 -371 174 b -359 174 -362 174 -360 174 b -262 86 -351 174 -356 179 b -176 0 -216 37 -176 0 b -107 84 -176 0 -145 37 b -31 174 -36 173 -38 172 b -25 174 -29 174 -28 174 b -16 173 -23 174 -19 173 b 147 11 -13 172 35 123 l 157 -1 l 160 1 l 163 4 l 163 130 b 164 260 163 256 163 258 b 175 273 166 266 170 270 '\n },\n 'ornamentPrecompTrillSuffixDandrieu': {\n 'x_min': -590.71875,\n 'x_max': 589.359375,\n 'ha': 601,\n 'o': 'm 544 335 b 553 337 548 337 551 337 b 575 313 563 337 570 330 b 589 226 583 285 589 256 b 517 8 589 152 563 76 b 464 -58 507 -4 503 -9 l 401 -136 b 362 -176 372 -172 370 -176 b 357 -176 360 -176 359 -176 b 261 -87 349 -174 355 -180 b 175 0 215 -38 175 0 b 106 -86 175 0 144 -38 b 29 -174 35 -174 36 -173 b 24 -176 28 -176 27 -176 b 14 -174 21 -176 17 -174 b -73 -87 12 -173 -8 -152 b -159 0 -121 -38 -159 0 b -228 -86 -160 0 -190 -38 b -304 -174 -299 -174 -298 -173 b -310 -176 -306 -176 -308 -176 b -319 -174 -314 -176 -318 -174 b -483 -12 -323 -173 -359 -137 l -495 0 l -524 -34 b -562 -77 -553 -73 -556 -76 b -568 -79 -564 -79 -566 -79 b -590 -58 -581 -79 -590 -69 b -588 -49 -590 -55 -589 -52 b -412 170 -585 -43 -417 165 b -398 174 -408 173 -402 174 b -389 173 -394 174 -392 174 b -300 86 -387 172 -366 151 b -215 -1 -254 37 -215 -1 b -145 84 -215 -1 -183 37 b -69 173 -74 173 -76 172 b -63 174 -68 174 -66 174 b -54 173 -61 174 -57 173 b 34 86 -51 172 -31 151 b 119 -1 81 37 119 -1 b 189 84 121 -1 151 37 b 265 173 259 173 258 172 b 270 174 266 174 269 174 b 280 173 274 174 279 173 b 370 84 283 172 303 151 b 455 -1 416 37 455 -1 l 455 -1 b 476 24 455 -1 469 15 b 547 226 522 87 547 159 b 534 302 547 252 543 278 b 532 317 533 308 532 313 b 544 335 532 326 536 333 '\n },\n 'ornamentPrecompDoubleCadenceUpperPrefix': {\n 'x_min': -597.53125,\n 'x_max': 596.171875,\n 'ha': 608,\n 'o': 'm -533 324 b -525 327 -530 326 -528 327 b -504 305 -514 327 -504 317 b -504 305 -504 305 -504 305 b -513 284 -504 299 -504 299 b -556 112 -541 226 -556 167 b -545 33 -556 84 -552 58 b -524 -20 -541 15 -532 -9 l -522 -23 l -491 15 l -413 111 b -355 174 -367 169 -363 174 b -351 174 -353 174 -352 174 b -254 86 -343 174 -348 179 b -168 -1 -208 37 -168 -1 b -100 84 -168 -1 -137 37 b -23 173 -28 173 -29 172 b -19 174 -21 174 -20 174 b -8 173 -14 174 -10 173 b 80 86 -5 172 13 151 b 166 -1 127 37 166 -1 b 235 84 166 -1 197 37 b 311 173 306 173 304 172 b 317 174 313 174 314 174 b 326 173 319 174 323 173 b 490 11 329 172 366 134 l 502 -1 l 530 34 b 568 76 560 72 563 74 b 575 77 570 77 573 77 b 596 56 586 77 596 68 b 594 48 596 54 596 51 b 417 -172 592 41 424 -166 b 405 -176 415 -174 409 -176 b 396 -174 401 -176 398 -176 b 307 -87 393 -173 372 -152 b 221 -1 259 -38 221 -1 b 152 -86 221 -1 190 -38 b 76 -176 81 -174 83 -173 b 70 -176 74 -176 73 -176 b 61 -174 66 -176 62 -174 b -27 -87 58 -173 38 -152 b -114 -1 -74 -38 -112 -1 b -182 -86 -114 -1 -145 -38 b -258 -176 -253 -174 -253 -173 b -264 -176 -259 -176 -262 -176 b -274 -174 -268 -176 -272 -174 b -438 -11 -277 -173 -348 -102 l -449 0 l -479 -37 b -524 -80 -513 -80 -514 -80 l -524 -80 b -553 -52 -534 -80 -540 -74 b -597 109 -583 -8 -597 48 b -560 280 -597 165 -585 224 b -533 324 -548 310 -540 322 '\n },\n 'ornamentPrecompDoubleCadenceUpperPrefixTurn': {\n 'x_min': -597.53125,\n 'x_max': 596.171875,\n 'ha': 608,\n 'o': 'm -533 324 b -525 327 -530 326 -528 327 b -504 305 -514 327 -504 317 b -504 305 -504 305 -504 305 b -513 284 -504 299 -504 299 b -556 112 -541 226 -556 167 b -545 33 -556 84 -552 58 b -524 -20 -541 15 -532 -9 l -522 -23 l -491 15 l -413 111 b -355 174 -367 169 -363 174 b -351 174 -353 174 -352 174 b -254 86 -343 174 -348 179 b -168 -1 -208 37 -168 -1 b -100 84 -168 -1 -137 37 b -23 173 -28 173 -29 172 b -19 174 -21 174 -20 174 b -8 173 -14 174 -10 173 b 155 11 -5 172 43 123 l 166 -1 l 168 1 l 170 4 l 170 130 b 171 260 170 256 170 258 b 191 274 175 269 183 274 b 205 267 196 274 201 272 b 212 158 212 262 210 273 l 212 56 l 257 112 b 311 173 304 172 304 172 b 317 174 313 174 314 174 b 326 173 319 174 323 173 b 490 11 329 172 366 134 l 502 -1 l 530 34 b 568 76 560 72 563 74 b 575 77 570 77 573 77 b 596 56 586 77 596 68 b 594 48 596 54 596 51 b 417 -172 592 41 424 -166 b 405 -176 415 -174 409 -176 b 396 -174 401 -176 398 -176 b 307 -87 393 -173 372 -152 b 221 -1 259 -38 221 -1 b 216 -6 221 -1 219 -2 l 212 -12 l 212 -147 b 212 -210 212 -173 212 -194 b 205 -292 212 -297 210 -287 b 191 -299 201 -297 196 -299 b 172 -287 183 -299 175 -295 b 170 -174 171 -284 171 -284 l 170 -63 l 127 -117 b 73 -176 84 -170 80 -176 b 68 -176 72 -176 70 -176 b -27 -87 59 -174 65 -180 b -114 0 -74 -38 -112 0 b -182 -86 -114 0 -145 -38 b -258 -174 -253 -174 -253 -173 b -264 -176 -259 -176 -262 -176 b -274 -174 -268 -176 -272 -174 b -438 -11 -277 -173 -348 -102 l -449 0 l -479 -37 b -524 -80 -513 -80 -514 -80 l -524 -80 b -553 -52 -534 -80 -540 -74 b -597 109 -583 -8 -597 48 b -560 280 -597 165 -585 224 b -533 324 -548 310 -540 322 '\n },\n 'ornamentPrecompTrillLowerSuffix': {\n 'x_min': -597.53125,\n 'x_max': 596.171875,\n 'ha': 608,\n 'o': 'm -413 173 b -408 174 -412 174 -409 174 b -397 173 -404 174 -400 173 b -308 86 -394 172 -374 151 b -223 0 -261 37 -223 0 b -153 84 -223 0 -191 37 b -77 174 -83 173 -84 172 b -72 174 -76 174 -74 174 b -62 173 -68 174 -63 173 b 25 86 -59 172 -39 151 b 112 0 73 37 111 0 b 181 84 112 0 144 37 b 257 174 251 173 251 172 b 262 174 258 174 261 174 b 273 173 266 174 270 173 b 436 9 276 172 347 101 l 447 -1 l 477 36 b 522 79 511 79 513 79 l 522 79 b 552 51 533 79 539 73 b 596 -112 582 6 596 -51 b 567 -262 596 -161 586 -213 b 539 -322 558 -287 544 -316 b 524 -327 534 -326 529 -327 b 504 -315 515 -327 507 -323 b 503 -308 503 -312 503 -309 b 511 -285 503 -302 504 -297 b 555 -113 540 -227 555 -169 b 544 -34 555 -86 551 -59 b 522 19 540 -16 530 8 l 521 22 l 481 -26 l 405 -122 b 353 -176 366 -172 362 -176 b 349 -176 352 -176 351 -176 b 253 -87 341 -176 347 -180 b 167 0 206 -38 167 0 b 99 -86 167 0 136 -38 b 21 -174 27 -174 28 -173 b 17 -176 20 -176 19 -176 b 6 -174 13 -176 9 -174 b -81 -87 4 -173 -14 -152 b -167 0 -129 -38 -167 0 b -236 -86 -167 0 -198 -38 b -313 -174 -307 -174 -306 -173 b -318 -176 -314 -176 -315 -176 b -328 -174 -321 -176 -325 -174 b -491 -12 -330 -173 -367 -137 l -503 0 l -530 -34 b -570 -77 -562 -73 -564 -76 b -577 -79 -571 -79 -574 -79 b -597 -58 -588 -79 -597 -69 b -596 -49 -597 -55 -597 -52 b -417 172 -593 -43 -423 167 b -413 173 -417 172 -415 173 '\n },\n 'stringsDownBow': {\n 'x_min': -149.71875,\n 'x_max': 148.359375,\n 'ha': 151,\n 'o': 'm -9 215 b 0 217 -6 217 -4 217 b 19 205 8 217 14 213 b 20 142 20 202 20 201 l 20 84 l 23 84 b 144 -27 81 74 129 30 b 148 -66 147 -40 148 -54 b 36 -213 148 -134 103 -197 b 0 -219 24 -217 12 -219 b -145 -104 -68 -219 -129 -173 b -149 -68 -148 -91 -149 -79 b -24 84 -149 6 -98 74 l -21 84 l -21 142 b -19 205 -20 201 -20 202 b -9 215 -17 209 -13 213 m -21 -15 b -23 41 -21 37 -21 41 b -23 41 -23 41 -23 41 b -76 11 -35 40 -62 26 b -108 -65 -98 -11 -108 -38 b -1 -176 -108 -122 -65 -176 b 107 -65 63 -176 107 -122 b 74 11 107 -38 96 -11 b 20 41 61 26 32 41 b 20 -15 20 41 20 15 b 19 -74 20 -72 20 -72 b 0 -87 14 -83 6 -87 b -19 -74 -8 -87 -16 -83 b -21 -15 -20 -72 -20 -72 '\n },\n 'stringsUpBow': {\n 'x_min': -149.71875,\n 'x_max': 148.359375,\n 'ha': 151,\n 'o': 'm -137 381 b -130 383 -134 383 -133 383 b -111 371 -122 383 -114 378 b -55 224 -110 370 -85 305 b 0 80 -25 145 -1 80 b 54 224 0 80 24 145 b 112 377 114 384 110 373 b 127 384 118 381 122 384 b 148 362 138 384 148 374 l 148 356 l 83 183 b 16 9 47 88 17 11 b -1 0 12 2 5 0 b -14 5 -5 0 -10 1 b -84 183 -19 9 -13 -6 l -149 356 l -149 362 b -137 381 -149 371 -145 378 '\n },\n 'stringsHarmonic': {\n 'x_min': -122.5,\n 'x_max': 121.140625,\n 'ha': 124,\n 'o': 'm -16 145 b 0 147 -10 147 -5 147 b 121 -1 66 147 121 77 b 114 -49 121 -16 118 -33 b -1 -148 95 -112 47 -148 b -85 -106 -31 -148 -61 -134 b -122 -1 -110 -76 -122 -38 b -16 145 -122 68 -81 134 m 12 111 b 0 113 8 113 4 113 b -68 22 -29 113 -61 73 b -70 0 -69 15 -70 6 b -13 -113 -70 -49 -47 -98 b -1 -115 -9 -115 -5 -115 b 63 -40 24 -115 53 -83 b 68 -1 66 -27 68 -15 b 12 111 68 48 46 97 '\n },\n 'pluckedSnapPizzicatoAbove': {\n 'x_min': -149.71875,\n 'x_max': 148.359375,\n 'ha': 151,\n 'o': 'm -9 215 b 0 217 -6 217 -4 217 b 19 205 8 217 14 213 b 20 142 20 202 20 201 l 20 84 l 23 84 b 144 -27 81 74 129 30 b 148 -66 147 -40 148 -54 b 36 -213 148 -134 103 -197 b 0 -219 24 -217 12 -219 b -145 -104 -68 -219 -129 -173 b -149 -68 -148 -91 -149 -79 b -24 84 -149 6 -98 74 l -21 84 l -21 142 b -19 205 -20 201 -20 202 b -9 215 -17 209 -13 213 m -21 -15 b -23 41 -21 37 -21 41 b -23 41 -23 41 -23 41 b -76 11 -35 40 -62 26 b -108 -65 -98 -11 -108 -38 b -1 -176 -108 -122 -65 -176 b 107 -65 63 -176 107 -122 b 74 11 107 -38 96 -11 b 20 41 61 26 32 41 b 20 -15 20 41 20 15 b 19 -74 20 -72 20 -72 b 0 -87 14 -83 6 -87 b -19 -74 -8 -87 -16 -83 b -21 -15 -20 -72 -20 -72 '\n },\n 'pluckedSnapPizzicatoBelow': {\n 'x_min': -149.71875,\n 'x_max': 148.359375,\n 'ha': 151,\n 'o': 'm -9 215 b 0 217 -6 217 -4 217 b 19 205 8 217 14 213 b 20 142 20 202 20 201 l 20 84 l 23 84 b 144 -27 81 74 129 30 b 148 -66 147 -40 148 -54 b 36 -213 148 -134 103 -197 b 0 -219 24 -217 12 -219 b -145 -104 -68 -219 -129 -173 b -149 -68 -148 -91 -149 -79 b -24 84 -149 6 -98 74 l -21 84 l -21 142 b -19 205 -20 201 -20 202 b -9 215 -17 209 -13 213 m -21 -15 b -23 41 -21 37 -21 41 b -23 41 -23 41 -23 41 b -76 11 -35 40 -62 26 b -108 -65 -98 -11 -108 -38 b -1 -176 -108 -122 -65 -176 b 107 -65 63 -176 107 -122 b 74 11 107 -38 96 -11 b 20 41 61 26 32 41 b 20 -15 20 41 20 15 b 19 -74 20 -72 20 -72 b 0 -87 14 -83 6 -87 b -19 -74 -8 -87 -16 -83 b -21 -15 -20 -72 -20 -72 '\n },\n 'pluckedLeftHandPizzicato': {\n 'x_min': 0,\n 'x_max': 319.859375,\n 'ha': 326,\n 'o': 'm 149 508 b 159 509 152 509 155 509 b 186 494 170 509 181 503 b 190 440 190 487 190 488 l 190 430 l 190 377 l 242 377 l 251 377 b 303 373 298 377 296 377 b 319 345 314 367 319 356 b 304 319 319 335 314 324 b 250 315 296 315 299 315 l 242 315 l 190 315 l 190 262 l 190 252 b 186 198 190 204 190 205 b 159 183 179 188 170 183 b 132 198 148 183 138 188 b 127 252 127 205 127 204 l 127 262 l 127 315 l 76 315 l 68 315 b 14 319 20 315 21 315 b 0 347 4 324 0 335 b 14 373 0 356 4 367 b 68 377 21 377 20 377 l 76 377 l 127 377 l 127 430 l 127 440 b 132 494 127 488 127 487 b 149 508 136 501 142 505 '\n },\n 'keyboardPedalPed': {\n 'x_min': -1.359375,\n 'x_max': 1064.390625,\n 'ha': 1086,\n 'o': 'm 296 692 b 314 694 302 694 307 694 b 386 685 337 694 366 689 b 548 498 480 660 548 580 b 548 481 548 492 548 487 b 455 395 541 426 499 395 b 370 462 420 395 383 417 b 362 496 364 477 362 488 b 377 514 362 509 367 514 b 393 501 386 514 390 510 b 432 474 397 484 413 474 b 470 487 445 474 458 478 b 491 530 484 496 491 510 b 490 544 491 534 491 539 b 333 660 479 606 411 657 l 323 662 l 315 646 b 269 524 285 591 269 556 b 321 431 269 492 287 466 b 349 395 338 413 343 408 b 363 342 359 378 363 362 b 359 312 363 333 362 322 b 285 158 348 266 318 206 b 281 152 283 155 281 152 b 281 152 281 152 281 152 b 287 154 283 152 284 152 b 318 155 298 154 308 155 b 461 98 371 155 419 136 l 464 97 l 483 112 b 503 129 494 120 503 127 b 504 130 503 129 504 129 b 503 138 504 131 503 134 b 500 180 500 152 500 166 b 553 326 500 238 518 288 b 604 366 560 331 592 358 b 649 381 617 376 632 381 b 696 362 665 381 681 374 b 724 302 714 347 724 324 b 695 238 724 278 714 255 b 660 210 691 234 662 212 b 579 148 658 209 582 151 b 579 148 579 148 579 148 b 596 106 579 144 589 119 b 622 77 604 88 609 83 b 657 69 632 72 645 69 b 748 112 688 69 721 84 b 755 123 754 117 755 120 b 755 127 755 124 755 126 b 751 165 752 137 751 151 b 758 219 751 183 754 202 b 894 387 774 290 820 347 b 896 390 896 388 896 388 b 891 398 896 391 895 392 b 622 560 827 477 730 535 b 600 580 605 564 600 569 b 617 596 600 591 607 596 b 628 595 622 596 624 596 b 1057 248 846 552 1020 412 b 1064 191 1061 229 1064 209 b 922 0 1064 94 1005 9 b 902 -1 916 -1 909 -1 b 774 76 847 -1 800 26 b 769 83 770 81 770 83 b 769 81 769 83 769 83 b 627 -1 733 29 677 -1 b 548 27 597 -1 570 8 b 515 88 537 37 525 61 l 513 95 l 510 93 l 453 45 b 390 0 396 0 396 0 b 390 0 390 0 390 0 b 374 15 381 0 377 4 b 268 105 359 69 314 105 b 250 104 262 105 257 105 l 243 102 l 234 90 b 155 1 201 49 159 2 b 147 -1 152 0 149 -1 b 130 15 138 -1 130 6 b 132 20 130 18 132 19 b 136 31 133 22 134 27 b 220 131 149 74 178 109 b 231 137 225 134 230 136 b 302 278 280 202 302 244 b 265 335 302 299 295 309 b 209 442 234 363 213 402 b 209 455 209 446 209 451 b 279 648 209 502 232 564 l 285 659 l 283 659 b 176 627 238 653 210 645 b 57 477 111 594 66 538 b 55 459 55 471 55 464 b 72 409 55 437 61 415 b 93 403 78 405 87 403 b 152 467 123 403 151 431 b 168 488 153 483 157 488 b 185 462 181 488 185 483 l 185 460 b 137 344 183 409 168 369 b 78 322 119 328 98 322 b 13 360 50 322 25 335 b -1 426 4 380 -1 402 b 89 610 -1 488 32 559 b 296 692 147 659 210 685 m 926 348 b 921 353 924 351 922 353 b 914 348 920 353 918 351 b 823 167 857 306 823 237 b 828 124 823 154 826 138 b 890 31 837 79 862 40 b 896 31 892 31 894 31 b 956 104 916 31 940 59 b 970 191 965 129 970 159 b 966 241 970 208 969 224 b 926 348 959 277 945 313 m 627 326 b 619 326 624 326 622 326 b 598 316 611 326 604 323 b 568 215 579 288 568 255 b 568 208 568 213 568 210 b 571 183 570 195 570 184 l 571 183 b 594 201 571 183 582 191 l 634 231 b 660 259 653 247 656 248 b 664 278 662 266 664 272 b 627 326 664 299 649 320 '\n },\n 'keyboardPedalUp': {\n 'x_min': -1.359375,\n 'x_max': 592.078125,\n 'ha': 604,\n 'o': 'm 280 692 b 295 694 283 692 289 694 b 310 692 300 694 307 692 b 357 630 340 684 357 657 b 336 580 357 612 351 594 b 311 538 321 566 311 549 b 352 492 311 512 330 492 b 366 495 357 492 362 492 b 397 553 390 503 397 517 b 415 603 397 576 402 591 b 460 623 427 617 443 623 b 509 599 479 623 498 614 b 522 559 518 587 522 573 b 494 506 522 538 513 519 b 451 495 481 498 473 496 b 415 488 432 495 426 494 b 394 449 404 483 394 464 b 394 448 394 448 394 448 l 394 440 l 397 433 b 428 409 404 420 413 413 b 438 408 431 408 435 408 b 479 431 450 408 462 415 b 528 455 495 448 510 455 b 548 452 534 455 541 453 b 592 391 577 442 592 416 b 549 331 592 365 577 340 b 528 327 541 328 534 327 b 479 351 510 327 495 335 b 438 374 464 367 450 374 b 417 369 431 374 424 373 b 394 333 402 360 394 348 b 400 312 394 326 396 319 b 451 287 408 294 420 288 b 513 258 484 285 499 278 b 522 223 519 247 522 234 b 461 159 522 190 496 159 b 449 161 457 159 453 159 b 397 229 416 167 397 191 b 366 288 397 265 390 278 b 352 290 362 290 357 290 b 315 262 336 290 321 280 b 311 245 313 256 311 251 b 334 204 311 233 318 220 b 355 170 348 190 351 184 b 357 152 356 166 357 159 b 355 136 357 147 356 140 b 295 88 345 104 321 88 b 232 152 264 88 232 112 b 255 204 232 174 238 186 b 279 244 273 222 279 231 l 279 245 b 238 290 279 270 259 290 b 224 288 234 290 228 290 b 193 229 200 278 193 265 b 141 161 193 191 174 167 b 129 159 137 159 133 159 b 68 223 93 159 68 190 b 77 258 68 234 70 247 b 138 287 91 278 106 285 b 185 302 166 287 175 291 b 196 333 193 312 196 323 b 174 369 196 347 187 360 b 152 374 166 373 159 374 b 111 351 140 374 126 367 b 62 327 95 335 80 327 b 51 328 58 327 54 327 b -1 391 16 334 -1 363 b 53 455 -1 420 17 449 b 62 455 57 455 59 455 b 111 431 80 455 95 448 b 152 408 127 415 140 408 b 161 409 155 408 159 408 b 193 433 176 413 186 420 l 196 440 l 196 448 b 196 451 196 449 196 449 b 190 471 196 459 194 463 b 137 495 182 489 167 495 l 134 495 l 134 495 b 68 560 95 495 68 521 b 129 623 68 596 95 623 b 144 621 134 623 138 623 b 193 553 175 614 193 589 b 224 495 193 517 200 503 b 238 492 228 492 234 492 b 279 538 259 492 279 512 b 254 580 279 549 269 566 b 232 630 239 594 232 612 b 280 692 232 657 250 684 m 307 456 b 295 458 303 458 299 458 b 230 391 258 458 230 426 b 236 360 230 381 231 371 b 295 324 249 337 272 324 b 353 360 318 324 341 337 b 360 391 357 370 360 381 b 307 456 360 421 340 451 '\n },\n 'pictChokeCymbal': {\n 'x_min': 0,\n 'x_max': 227.3125,\n 'ha': 232,\n 'o': 'm 91 213 b 100 215 93 215 96 215 b 227 58 167 215 224 144 b 227 52 227 56 227 54 b 61 -201 227 -43 164 -138 b 29 -216 44 -212 36 -216 b 23 -210 27 -216 24 -213 b 21 -205 21 -208 21 -206 b 34 -192 21 -201 25 -197 b 122 -55 89 -161 122 -106 b 104 6 122 -33 117 -12 l 103 9 l 96 9 b 4 79 57 9 17 38 b 0 112 1 90 0 101 b 91 213 0 163 36 209 '\n },\n 'wiggleArpeggiatoUp': {\n 'x_min': 58.53125,\n 'x_max': 228.671875,\n 'ha': 294,\n 'o': 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 '\n },\n 'arrowheadBlackUp': {\n 'x_min': -10.890625,\n 'x_max': 299.4375,\n 'ha': 294,\n 'o': 'm 136 460 b 142 462 137 462 140 462 b 166 449 152 462 161 456 b 171 428 168 446 168 445 b 288 131 194 322 238 209 b 298 115 295 120 296 117 b 299 106 298 112 299 109 b 273 81 299 91 287 81 b 255 86 268 81 261 83 b 155 116 225 104 183 116 l 152 116 l 149 108 b 141 83 148 102 144 91 b 134 48 137 69 134 58 b 149 9 134 34 140 24 b 153 -1 152 5 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 147 -11 b 122 2 138 -11 133 -6 b 95 61 104 20 95 38 b 107 108 95 74 99 90 b 108 113 107 111 108 112 b 107 113 108 113 108 113 b 102 113 106 113 104 113 b 31 86 76 108 53 98 b 14 80 24 81 20 80 b -10 106 0 80 -10 91 b 0 131 -10 115 -9 116 b 115 430 49 209 91 317 b 136 460 119 451 123 456 '\n },\n 'arrowheadBlackDown': {\n 'x_min': -10.890625,\n 'x_max': 298.078125,\n 'ha': 294,\n 'o': 'm 138 473 b 142 474 140 473 141 474 b 164 459 148 474 153 470 b 191 402 183 442 191 423 b 181 353 191 388 187 371 b 178 349 179 352 178 349 b 179 348 178 348 179 348 b 185 349 181 348 182 348 b 255 376 210 355 234 363 b 272 381 264 381 266 381 b 298 355 287 381 298 370 b 288 330 298 348 298 345 b 171 34 238 254 194 141 b 166 13 168 16 168 16 b 144 1 161 5 152 1 b 121 15 134 1 125 5 b 115 33 119 18 117 24 b 0 330 91 145 49 252 b -10 355 -9 345 -10 348 b 13 381 -10 371 0 381 b 31 376 19 381 25 380 b 132 345 61 358 103 345 l 136 345 l 137 355 b 145 378 138 359 142 370 b 152 415 149 394 152 405 b 137 452 152 427 148 438 b 133 464 134 458 133 460 b 138 473 133 467 134 470 '\n },\n 'vexAccidentalMicrotonal1': {\n 'x_min': -171.5,\n 'x_max': 483.1875,\n 'ha': 493,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 495 20 616 20 616 b 20 373 20 427 20 373 b 115 410 20 373 63 390 l 210 448 l 210 531 b 212 620 210 614 210 616 b 231 632 215 628 223 632 b 246 627 236 632 242 631 b 251 541 251 620 251 628 l 251 463 l 315 489 b 387 514 368 509 381 514 b 393 513 390 514 392 514 b 406 494 402 510 406 502 b 397 476 406 487 404 480 b 323 446 396 474 363 462 l 251 417 l 251 283 l 251 148 l 254 151 b 370 199 291 183 332 199 b 415 191 385 199 400 197 b 483 84 458 176 483 134 b 461 0 483 58 476 29 b 332 -142 439 -40 411 -72 l 255 -215 b 231 -229 240 -229 239 -229 b 216 -223 224 -229 220 -227 b 210 -158 210 -217 210 -223 b 210 -120 210 -148 210 -136 l 210 -29 l 205 -34 b 100 -142 182 -65 159 -88 l 23 -215 b -1 -229 9 -229 6 -229 b -19 -217 -9 -229 -16 -224 l -20 -215 l -21 48 l -21 310 l -83 287 b -152 262 -133 266 -145 262 b -157 263 -153 262 -155 262 b -171 283 -166 266 -171 274 b -161 301 -171 290 -167 297 b -91 328 -160 302 -129 315 l -21 356 l -21 487 l -20 617 l -19 621 b -8 631 -17 626 -12 630 m 210 288 b 210 401 210 351 210 401 b 114 365 209 401 167 384 l 20 327 l 20 238 l 20 148 l 21 151 b 140 199 59 183 102 199 b 206 180 164 199 187 192 l 209 177 b 209 177 209 177 209 177 b 210 288 210 177 210 199 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 m 341 131 b 328 133 337 133 332 133 b 322 133 326 133 323 133 b 257 87 296 129 273 113 l 251 80 l 251 -37 l 251 -156 l 255 -152 b 375 81 328 -72 375 20 l 375 83 b 341 131 375 113 367 126 '\n },\n 'vexAccidentalMicrotonal2': {\n 'x_min': -1.359375,\n 'x_max': 386.5625,\n 'ha': 394,\n 'o': 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 '\n },\n 'vexWiggleArpeggioUp': {\n 'x_min': 58.53125,\n 'x_max': 228.671875,\n 'ha': 294,\n 'o': 'm 138 371 b 142 373 140 371 141 373 b 178 342 149 373 156 366 b 228 251 217 297 228 278 b 228 244 228 248 228 247 b 176 147 227 212 212 184 b 123 73 152 122 132 93 b 121 62 122 70 121 66 b 145 13 121 48 129 31 b 153 -2 151 6 153 1 b 149 -9 153 -5 152 -6 b 144 -11 148 -11 145 -11 b 129 -1 140 -11 136 -8 b 61 87 89 37 68 68 b 58 113 59 95 58 105 b 110 215 58 144 74 177 b 163 287 134 240 155 269 b 166 299 166 291 166 295 b 141 348 166 313 157 330 b 133 360 134 356 133 358 b 133 363 133 362 133 362 b 138 371 133 367 136 370 '\n },\n 'vexNoteHeadMutedBreve': {\n 'x_min': 0,\n 'x_max': 370.21875,\n 'ha': 378,\n 'o': 'm 0 0 l 0 277 l 61 277 l 122 277 l 122 0 l 122 -278 l 61 -278 l 0 -278 l 0 0 m 246 -1 l 246 277 l 308 277 l 370 277 l 370 -1 l 370 -278 l 308 -278 l 246 -278 l 246 -1 '\n }\n },\n 'cssFontWeight': 'normal',\n 'ascender': 1903,\n 'underlinePosition': -125,\n 'cssFontStyle': 'normal',\n 'boundingBox': {\n 'yMin': -2065.375,\n 'xMin': -695.53125,\n 'yMax': 1901.578125,\n 'xMax': 1159.671875\n },\n 'resolution': 1000,\n 'original_font_information': {\n 'postscript_name': 'Gonville-18',\n 'version_string': 'Version 0.1.8904 ',\n 'vendor_url': '',\n 'full_font_name': 'Gonville-18',\n 'font_family_name': 'Gonville-18',\n 'copyright': 'No copyright is claimed on this font file.',\n 'description': '',\n 'trademark': '',\n 'designer': '',\n 'designer_url': '',\n 'unique_font_identifier': 'FontForge 2.0 : Gonville-18 : 17-3-2010',\n 'license_url': '',\n 'license_description': '',\n 'manufacturer_name': '',\n 'font_sub_family_name': '18'\n },\n 'descender': -2066,\n 'familyName': 'Gonville-18',\n 'lineHeight': 4093,\n 'underlineThickness': 50\n};\n","export const PetalumaMetrics = {\n name: 'Petaluma',\n smufl: true,\n\n stave: {\n padding: 15,\n },\n\n clef: {\n default: {\n point: 32,\n width: 26,\n },\n small: {\n point: 26,\n width: 20,\n },\n\n annotations: {\n '8va': {\n smuflCode: 'timeSig8',\n default: {\n point: 18,\n treble: {\n line: -1.4,\n shiftX: 12,\n },\n },\n small: {\n point: 16,\n treble: {\n line: -0.2,\n shiftX: 8,\n },\n }\n },\n '8vb': {\n smuflCode: 'timeSig8',\n default: {\n point: 18,\n treble: {\n line: 6,\n shiftX: 10,\n },\n bass: {\n line: 3.5,\n shiftX: 1,\n }\n },\n small: {\n point: 16,\n treble: {\n line: 5.3,\n shiftX: 6,\n },\n bass: {\n line: 3.1,\n shiftX: 0.5,\n }\n }\n }\n },\n\n // These may no longer be necessary\n lineCount: {\n '8': { point: 55, shiftY: 14 },\n '7': { point: 47, shiftY: 8 },\n '6': { point: 32, shiftY: 1 },\n '5': { point: 30, shiftY: -6 },\n '4': { point: 23, shiftY: -12 },\n }\n },\n\n pedalMarking: {\n up: {\n point: 40\n },\n down: {\n point: 34\n }\n },\n\n // These are for numeric digits, such as in time signatures\n digits: {\n // used by timesig\n shiftLine: -1,\n point: 22,\n\n // used by tuplets\n tupletPoint: 16,\n shiftY: -2,\n },\n\n articulation: {\n articStaccatissimoAbove: {\n padding: 2,\n },\n articStaccatissimoBelow: {\n padding: 2,\n }\n },\n\n tremolo: {\n default: {\n point: 25,\n spacing: 5,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 11,\n offsetXStemDown: 1,\n },\n grace: {\n point: 18,\n spacing: 4,\n offsetYStemUp: -5,\n offsetYStemDown: 5,\n offsetXStemUp: 7,\n offsetXStemDown: 1,\n }\n },\n\n noteHead: {\n displaced: {\n shiftX: -2,\n },\n },\n\n stem: {\n // These are stem (Y) offsets to the note heads. To shift the\n // noteheads (x-position) themselves, see glyphs.notehead.custom.\n noteHead: {\n noteheadTriangleUpHalf: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpBlack: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadTriangleUpWhole: {\n offsetYBaseStemUp: 5,\n offsetYBaseStemDown: 4,\n },\n noteheadXHalf: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXBlack: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadXWhole: {\n offsetYBaseStemUp: -4,\n offsetYBaseStemDown: 4,\n },\n noteheadBlack: {\n offsetYBaseStemDown: 2,\n offsetYBaseStemUp: -2,\n },\n noteheadSquareWhite: {\n offsetYBaseStemDown: -5,\n offsetYBaseStemUp: 5,\n }\n }\n },\n\n // Values under here are used by the Glyph class to reposition and rescale\n // glyphs based on their category. This should be the first stop for\n // custom font glyph repositioning.\n //\n // The glyph loader first looks up a specific set of settings based on the\n // glyph code, and if not found, uses the defaults from the category. See\n // glyphs.textNote for an example of this.\n //\n // Details in Glyph.lookupFontMetrics.\n glyphs: {\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n segno: {\n shiftX: -7,\n },\n flag: {\n shiftX: -0.75,\n tabStem: {\n shiftX: -1.75,\n },\n staveTempo: {\n shiftX: -1,\n }\n },\n clef: {\n gClef: {\n default: { scale: 1.1, shiftY: 1 },\n small: { shiftY: 1.5 }\n },\n fClef: {\n default: { shiftY: -0.5 }\n }\n },\n ornament: {\n ornamentTurn: {\n scale: 1.2,\n },\n ornamentTurnSlash: {\n scale: 1.2,\n },\n },\n stroke: {\n arrowheadBlackDown: {\n straight: {\n shiftX: -4.5,\n },\n wiggly: {\n shiftX: -1,\n shiftY: 1,\n }\n },\n arrowheadBlackUp: {\n straight: {\n shiftX: -0.85,\n },\n wiggly: {\n shiftX: -1,\n shiftY: 1,\n }\n }\n },\n textNote: {\n point: 34,\n breathMarkTick: {\n point: 36,\n shiftY: 9,\n },\n breathMarkComma: {\n point: 36,\n },\n segno: {\n point: 30,\n shiftX: -7,\n shiftY: 8,\n },\n coda: {\n point: 20,\n shiftX: -7,\n shiftY: 8,\n },\n ornamentTrill: {\n shiftX: -10,\n shiftY: 8,\n },\n ornamentMordent: {\n shiftX: -8,\n },\n ornamentShortTrill: {\n shiftX: -8,\n }\n },\n noteHead: {\n standard: {\n noteheadBlackStemUp: {\n shiftX: 1.5,\n point: 34,\n },\n noteheadBlackStemDown: {\n point: 34,\n },\n noteheadHalfStemUp: {\n shiftX: 1,\n point: 34,\n },\n noteheadHalfStemDown: {\n point: 34,\n },\n noteheadWholeStemUp: {\n shiftX: 1,\n point: 34,\n },\n noteheadWholeStemDown: {\n point: 34,\n },\n restQuarterStemUp: {\n point: 35,\n },\n restQuarterStemDown: {\n point: 35,\n },\n },\n custom: {\n 'noteheadCircleXStemUp': {\n shiftX: -1,\n },\n 'noteheadCircleXStemDown': {\n shiftX: 0.25,\n },\n 'noteheadDiamondHalfStemUp': {\n shiftX: 1.5,\n },\n 'noteheadDiamondBlackStemUp': {\n shiftX: 1.5,\n },\n 'noteheadDiamondWholeStemUp': {\n shiftX: 1,\n },\n 'noteheadXBlackStemUp': {\n shiftX: 1,\n },\n 'noteheadXHalfStemUp': {\n shiftX: -3,\n },\n 'noteheadXHalfStemDown': {\n shiftX: 1,\n },\n 'noteheadXWholeStemUp': {\n shiftX: -7,\n },\n 'noteheadXWholeStemDown': {\n shiftX: 1,\n },\n 'noteheadSquareWhiteStemDown': {\n shiftX: 0.25,\n },\n 'noteheadSquareWhiteStemUp': {\n shiftX: -0.75,\n },\n 'noteheadSquareBlackStemUp': {\n shiftX: -0.75,\n },\n 'noteheadTriangleUpWholeStemUp': {\n shiftX: -0.75,\n }\n },\n },\n }\n};\n","export const PetalumaFont = {\n 'glyphs': {\n 'bracketTop': {\n 'x_min': 0,\n 'x_max': 508,\n 'y_min': 0,\n 'y_max': 370,\n 'ha': 370,\n 'o': 'm 22 0 b 122 0 55 1 89 0 l 157 0 b 713 376 425 0 622 137 b 732 467 724 406 732 436 b 726 514 732 482 730 498 b 711 533 723 528 719 533 b 693 526 707 533 700 530 b 674 498 683 520 678 508 b 635 406 662 467 652 435 b 310 164 560 281 458 193 b 154 151 258 154 206 151 b 39 154 117 151 78 154 b 1 120 17 154 4 145 b 0 84 0 108 0 96 b 0 20 0 63 1 40 b 22 0 0 4 7 0 z'\n },\n 'bracketBottom': {\n 'x_min': 0,\n 'x_max': 496,\n 'y_min': -393,\n 'y_max': 0,\n 'ha': 393,\n 'o': 'm 696 -566 b 711 -539 713 -566 708 -549 b 714 -521 713 -533 714 -527 b 713 -508 714 -517 713 -513 b 661 -327 706 -445 688 -384 b 392 -42 603 -203 513 -109 b 206 0 331 -7 266 0 b 160 -1 190 0 174 -1 b 26 -1 107 -1 66 -3 b 0 -19 12 -1 0 -4 l 0 -23 b 3 -50 1 -32 3 -42 b 1 -86 3 -62 1 -73 b 4 -118 1 -96 1 -108 b 45 -151 10 -145 23 -154 b 180 -143 89 -144 135 -145 b 621 -419 392 -135 523 -236 b 662 -539 641 -456 655 -497 b 696 -566 667 -557 680 -566 z'\n },\n 'barlineTick': {\n 'x_min': 0,\n 'x_max': 56.036101509664164,\n 'y_min': 876.905249806889,\n 'y_max': 1121.5430338167066,\n 'ha': 244.63778400981766,\n 'o': 'm 42 1263 b 66 1287 62 1261 66 1272 b 81 1583 65 1387 72 1485 b 35 1614 82 1610 53 1610 b 14 1591 17 1619 16 1604 b 0 1408 7 1525 0 1459 l 0 1292 b 42 1263 1 1263 23 1266 z'\n },\n 'breathMarkTick': {\n 'x_min': 0,\n 'x_max': 568,\n 'y_min': 0,\n 'y_max': 621,\n 'ha': 621,\n 'o': 'm 258 0 b 278 39 276 0 274 24 b 279 56 279 45 279 50 l 279 73 b 278 117 279 88 278 102 b 281 148 278 127 279 138 b 536 600 312 330 387 487 b 744 719 600 651 670 690 b 815 779 775 730 808 740 b 818 824 818 793 818 808 b 815 868 818 838 818 852 b 796 894 814 881 808 894 b 779 888 791 894 786 893 b 719 864 760 878 739 871 b 372 602 580 806 459 724 b 229 252 298 498 251 383 b 220 268 225 262 222 264 b 209 302 217 279 213 291 b 75 527 181 387 143 467 b 16 563 58 543 39 573 b 0 539 3 557 0 549 b 12 492 0 524 9 507 b 56 400 19 459 22 425 b 163 269 104 367 138 323 b 238 36 197 194 216 115 b 258 0 242 22 243 0 z'\n },\n 'segno': {\n 'x_min': 0,\n 'x_max': 798,\n 'y_min': -65,\n 'y_max': 806,\n 'ha': 871,\n 'o': 'm 16 -94 b 66 -69 39 -92 53 -85 b 177 59 102 -26 138 17 b 543 456 298 192 420 324 b 726 300 615 420 680 373 b 753 217 744 271 753 243 b 655 112 753 170 719 131 b 599 104 636 107 618 104 b 461 173 544 104 495 128 b 432 190 454 183 444 190 b 409 179 425 190 418 187 b 359 118 390 160 373 141 b 341 72 347 101 341 86 b 373 24 341 56 351 40 b 409 6 384 17 396 10 b 550 -13 454 -12 501 -14 b 599 -6 566 -12 583 -10 b 864 213 720 27 806 104 b 886 300 878 242 886 271 b 857 395 886 331 877 363 b 799 467 840 420 821 445 b 648 572 755 513 704 546 b 1110 1083 802 743 955 914 b 1140 1129 1123 1097 1136 1110 b 1149 1148 1142 1135 1149 1142 b 1145 1153 1149 1149 1148 1152 b 1123 1161 1139 1158 1130 1161 b 1109 1156 1119 1161 1113 1159 b 1089 1138 1102 1151 1094 1145 b 946 988 1040 1089 989 1041 b 595 602 834 855 711 732 l 590 598 l 549 615 b 432 793 462 647 432 723 b 534 888 432 851 474 888 b 671 834 588 888 631 864 b 710 818 684 824 696 818 b 724 821 714 818 719 819 b 809 883 757 834 788 852 b 816 901 814 890 816 896 b 802 923 816 910 812 916 b 706 984 770 945 742 971 b 593 1011 668 998 631 1011 b 516 991 567 1011 541 1005 b 333 799 433 949 380 876 b 302 693 312 765 302 729 b 330 589 302 658 311 624 b 469 488 360 533 415 511 b 485 482 475 487 480 485 b 266 249 412 405 338 327 b 121 88 217 196 170 141 b 9 -65 78 40 37 -7 b 0 -85 4 -72 0 -79 b 16 -94 0 -91 4 -94 z m 251 350 b 363 436 285 348 353 403 b 354 456 366 448 360 452 b 271 518 327 477 298 497 b 243 528 261 526 252 528 b 210 513 232 528 222 523 b 157 454 190 494 176 472 b 141 428 147 444 141 436 b 158 406 141 420 147 413 b 216 361 180 393 197 376 b 245 350 225 356 235 350 b 251 350 246 350 249 350 z m 861 536 b 927 575 890 539 909 557 b 965 628 952 598 965 613 b 926 680 965 644 952 658 b 865 713 900 701 883 713 b 805 667 845 713 828 698 b 768 611 791 649 770 631 b 812 564 766 589 798 582 b 861 536 824 550 840 537 z'\n },\n 'coda': {\n 'x_min': 0,\n 'x_max': 1380,\n 'y_min': -196,\n 'y_max': 1037,\n 'ha': 1233,\n 'o': 'm 1028 -282 b 1057 -245 1045 -282 1053 -261 b 1060 -203 1060 -232 1060 -217 b 1063 9 1060 -132 1061 -62 b 1390 194 1192 22 1303 81 b 1531 543 1467 298 1512 415 b 1532 556 1531 547 1532 552 b 1904 559 1656 557 1780 559 b 1950 582 1920 559 1941 569 b 1987 674 1970 609 1987 638 b 1984 698 1987 681 1986 690 b 1950 700 1973 698 1961 700 l 1941 700 l 1545 696 b 1535 776 1545 723 1541 749 b 1103 1113 1477 996 1326 1107 b 1080 1115 1096 1115 1087 1115 b 1081 1322 1080 1184 1080 1253 b 1079 1467 1083 1371 1081 1418 b 1061 1493 1079 1476 1080 1493 l 1060 1493 b 1028 1467 1044 1490 1031 1485 b 1020 1403 1025 1446 1020 1424 b 1017 1110 1020 1305 1018 1208 l 962 1106 b 569 914 808 1087 671 1035 b 451 683 510 844 472 766 l 161 678 b 118 680 148 678 132 680 b 79 670 101 680 86 678 b 0 544 48 636 29 592 l 37 544 l 429 549 b 428 518 428 539 428 528 b 488 285 428 435 458 360 b 681 81 526 192 593 124 b 946 9 763 40 854 19 b 1008 6 966 7 988 6 b 1005 -137 1008 -42 1005 -89 b 1012 -243 1005 -173 1005 -209 b 1028 -282 1015 -258 1011 -282 z m 1008 180 b 660 264 886 181 770 212 b 524 471 570 305 524 374 b 528 524 524 488 526 505 l 533 549 b 792 552 619 550 706 550 b 1009 553 865 553 937 552 b 1008 180 1009 428 1008 288 z m 577 684 b 766 874 618 763 678 828 b 989 932 837 912 913 923 b 1015 933 998 932 1007 933 b 1014 822 1015 896 1014 860 b 1011 688 1012 791 1012 743 z m 1067 184 b 1071 553 1070 307 1068 429 b 1439 556 1194 553 1316 554 b 1437 554 1439 554 1437 554 b 1341 337 1413 478 1387 402 b 1119 192 1286 261 1211 212 b 1067 184 1102 189 1084 186 z m 1074 690 b 1079 935 1077 772 1077 852 b 1326 855 1166 932 1250 909 b 1446 694 1385 814 1426 759 b 1269 693 1387 694 1328 693 b 1074 690 1204 693 1139 691 z'\n },\n 'gClef': {\n 'x_min': 0,\n 'x_max': 664,\n 'y_min': -559,\n 'y_max': 1009,\n 'ha': 1568,\n 'o': 'm 343 -805 b 366 -801 350 -805 357 -804 b 409 -773 383 -795 397 -786 b 582 -328 528 -648 577 -497 b 583 -294 582 -315 583 -294 b 612 -279 583 -294 603 -282 b 747 -197 660 -256 706 -230 b 949 143 857 -109 920 10 b 956 206 955 164 956 186 b 791 384 956 297 906 363 b 704 393 762 390 733 393 b 498 336 632 393 563 374 b 481 325 490 331 481 325 l 444 465 b 442 485 442 472 442 485 b 609 880 442 485 589 746 b 619 996 616 919 619 958 b 613 1084 619 1027 618 1056 b 534 1387 599 1188 560 1286 b 482 1453 527 1417 517 1453 b 422 1407 456 1453 438 1428 b 305 1063 348 1305 312 1188 b 304 1002 304 1043 304 1022 b 338 654 304 886 323 769 b 343 629 338 645 341 636 b 144 356 278 537 206 451 b 23 144 101 288 53 220 b 0 20 7 107 0 63 b 82 -210 0 -69 30 -160 b 207 -288 112 -239 160 -271 b 410 -328 274 -312 340 -328 b 474 -324 431 -328 452 -327 l 491 -321 b 491 -341 491 -321 492 -334 b 402 -585 475 -428 454 -513 b 294 -668 374 -622 348 -664 b 271 -693 278 -670 271 -680 b 274 -708 271 -698 272 -703 b 302 -775 282 -730 292 -753 b 343 -805 311 -795 325 -805 z m 410 -160 b 311 -147 360 -160 311 -147 b 307 -98 311 -147 307 -127 b 314 -33 307 -79 308 -56 b 429 131 328 36 377 85 b 441 138 433 135 438 138 b 449 122 446 138 448 132 b 490 -131 462 37 484 -46 b 490 -153 491 -140 490 -153 b 410 -160 490 -153 452 -163 z m 252 -135 b 196 -121 232 -134 215 -127 b 117 -69 158 -108 127 -94 b 111 -32 112 -58 111 -45 b 117 19 111 -16 114 1 b 130 56 118 27 127 52 b 324 337 186 156 253 246 l 384 416 l 395 384 b 416 291 406 348 416 291 b 350 213 416 291 376 239 b 243 -42 278 143 243 55 b 251 -117 243 -66 246 -91 b 252 -135 252 -122 252 -127 z m 569 -131 l 563 -91 b 510 168 552 3 530 78 b 513 192 508 179 508 186 b 624 202 550 199 586 202 b 730 192 660 202 694 199 b 850 141 773 183 816 176 b 858 134 852 138 855 135 b 595 -121 801 19 716 -68 z m 400 717 b 382 922 389 786 382 854 b 481 1286 382 1047 408 1169 b 507 1125 498 1233 507 1179 b 500 1040 507 1097 504 1068 b 400 717 481 927 455 818 z'\n },\n 'cClef': {\n 'x_min': 0,\n 'x_max': 731,\n 'y_min': -543,\n 'y_max': 543,\n 'ha': 1086,\n 'o': 'm 615 -770 b 881 -684 710 -770 801 -739 b 1020 -395 986 -612 1020 -510 b 1017 -334 1020 -374 1018 -354 b 769 -62 1007 -209 896 -75 b 746 -60 762 -60 755 -60 b 639 -73 710 -60 675 -69 b 524 -109 598 -79 560 -92 b 528 -36 526 -85 528 -60 b 527 -4 528 -26 528 -14 b 528 39 527 10 528 24 b 526 99 528 59 527 79 b 592 94 549 95 570 94 b 648 99 611 94 629 95 b 912 157 744 94 844 117 b 1053 377 1009 215 1053 284 b 1050 425 1053 393 1053 409 b 914 665 1037 521 986 602 b 717 753 855 717 791 753 b 626 734 688 753 658 747 l 462 665 b 347 500 374 628 347 580 b 350 449 347 484 348 468 b 392 419 353 428 367 416 b 492 438 425 425 459 428 b 541 498 524 448 541 468 b 540 514 541 503 541 508 b 537 546 537 524 537 536 b 573 639 537 580 550 611 b 606 657 582 649 593 657 l 609 657 b 716 622 647 652 684 647 b 834 372 801 556 834 469 b 831 323 834 356 832 338 b 743 187 825 266 795 217 b 710 176 732 180 720 176 b 694 179 704 176 700 177 b 527 223 638 193 582 206 b 495 229 516 228 505 229 b 454 220 481 229 468 225 b 395 189 432 213 415 200 b 363 180 384 186 374 181 b 348 168 356 179 348 176 b 340 161 343 167 340 164 b 347 150 340 157 343 154 b 356 147 348 148 353 147 b 364 92 361 130 363 111 b 369 -37 367 49 369 6 b 363 -154 369 -76 367 -115 b 357 -236 360 -183 357 -210 b 376 -264 357 -253 361 -259 b 456 -289 402 -284 429 -289 b 521 -282 478 -289 500 -285 b 549 -255 537 -279 546 -271 b 598 -177 556 -225 577 -202 b 622 -164 605 -168 613 -164 b 636 -167 626 -164 631 -166 b 749 -225 678 -177 714 -199 b 848 -405 814 -276 848 -337 b 824 -507 848 -436 840 -471 b 657 -657 792 -582 730 -625 b 608 -668 638 -664 622 -668 b 534 -602 572 -668 547 -645 b 513 -575 530 -589 523 -575 b 507 -576 510 -575 508 -575 b 478 -582 497 -580 488 -582 b 405 -570 454 -582 428 -570 b 389 -572 399 -570 395 -570 l 363 -572 b 321 -575 348 -572 333 -569 l 321 631 b 323 662 323 641 323 652 b 315 716 323 681 321 698 b 304 736 314 723 317 736 l 302 736 b 281 716 294 734 285 729 b 275 665 276 700 275 683 l 275 382 b 276 99 275 288 275 193 b 279 -170 278 10 276 -81 b 284 -399 282 -246 284 -323 b 282 -629 284 -475 282 -553 b 289 -721 282 -660 289 -690 b 300 -736 289 -727 291 -736 b 312 -724 307 -736 310 -730 b 321 -667 323 -706 321 -687 l 321 -632 l 328 -644 l 340 -657 b 510 -757 386 -707 445 -740 b 615 -770 546 -766 580 -770 z m 131 -782 b 141 -755 138 -782 140 -773 b 147 -490 143 -667 145 -577 b 160 207 150 -258 153 -24 b 168 618 164 344 158 481 b 81 768 173 690 132 732 b 45 782 66 778 55 782 b 3 740 26 782 13 768 b 0 724 1 736 0 730 l 1 710 b 4 596 4 672 4 634 l 4 382 b 9 102 4 288 4 196 b 17 -301 13 -32 10 -166 l 17 -672 b 50 -736 17 -701 27 -720 b 109 -772 69 -749 91 -759 b 131 -782 120 -778 127 -782 z'\n },\n 'fClef': {\n 'x_min': 0,\n 'x_max': 776,\n 'y_min': -496,\n 'y_max': 216,\n 'ha': 712,\n 'o': 'm 402 -706 b 804 -405 592 -678 716 -566 b 876 -53 861 -298 874 -183 b 868 33 876 -32 873 1 b 560 311 845 217 723 311 b 524 310 549 311 536 311 b 131 134 373 297 239 242 b 17 -29 84 86 37 39 b 9 -89 12 -50 9 -71 b 112 -238 9 -154 43 -206 b 124 -243 117 -239 120 -242 b 186 -261 145 -255 166 -261 b 268 -228 215 -261 242 -249 b 351 -59 325 -181 351 -124 b 343 10 351 -36 348 -13 b 340 36 341 19 340 27 b 409 105 340 75 363 102 b 441 107 420 107 431 107 b 624 36 510 107 573 86 b 744 -200 688 -27 724 -109 b 747 -230 747 -210 747 -222 b 717 -323 747 -264 736 -292 b 608 -445 688 -370 654 -410 b 307 -541 518 -513 415 -541 b 213 -541 275 -541 245 -541 b 39 -521 154 -541 96 -539 b 0 -552 17 -514 0 -531 b 1 -564 0 -556 0 -560 b 17 -611 6 -580 10 -596 b 101 -694 35 -648 50 -684 b 288 -714 164 -707 225 -714 b 402 -706 325 -714 363 -711 z m 972 -281 b 1070 -148 1024 -279 1070 -210 b 1025 -105 1070 -105 1045 -112 b 989 -127 1004 -96 998 -114 b 949 -249 963 -164 963 -209 b 969 -281 943 -265 949 -281 b 972 -281 971 -281 971 -281 z m 1018 92 b 1080 118 1041 91 1068 96 b 1117 219 1099 150 1117 180 b 1113 252 1117 229 1116 240 b 1045 288 1102 297 1068 276 b 1017 262 1028 297 1024 274 b 984 124 989 220 996 170 b 1008 91 979 108 986 91 b 1018 92 1011 91 1015 92 z'\n },\n 'unpitchedPercussionClef1': {\n 'x_min': 0,\n 'x_max': 379.13761966945304,\n 'y_min': -250,\n 'y_max': 250,\n 'ha': 500,\n 'o': 'm 144 -341 b 207 -320 167 -341 189 -331 b 217 -301 215 -315 217 -308 b 210 -262 217 -289 210 -275 b 228 187 212 -112 209 37 b 228 287 228 220 229 253 b 174 353 228 336 222 343 b 120 359 157 357 138 359 b 48 357 96 359 72 356 b 17 323 29 357 19 344 b 7 120 16 255 9 187 b 6 -109 6 43 6 -33 l 6 -204 b 0 -251 6 -220 0 -235 b 3 -269 0 -256 0 -262 b 127 -340 24 -330 79 -328 b 144 -341 132 -341 138 -341 z m 481 -360 b 507 -357 491 -360 500 -360 b 546 -295 541 -346 547 -325 b 536 79 543 -170 540 -46 b 523 311 533 157 534 235 b 475 359 518 340 508 359 b 425 360 459 359 442 360 b 400 359 416 360 409 360 b 337 294 348 353 340 347 l 337 -73 b 336 -264 337 -137 337 -200 b 343 -294 336 -274 338 -284 b 481 -360 359 -330 431 -360 z'\n },\n '6stringTabClef': {\n 'x_min': 0,\n 'x_max': 438,\n 'y_min': -768,\n 'y_max': 767,\n 'ha': 1535,\n 'o': 'm 114 -320 b 127 -304 120 -320 124 -315 b 171 -174 141 -261 158 -219 b 222 -135 179 -147 196 -137 b 426 -122 289 -131 359 -128 b 498 -164 462 -120 482 -127 b 628 -301 521 -226 575 -264 b 631 -288 631 -295 631 -291 b 628 -269 631 -281 629 -276 b 569 -134 616 -220 589 -179 b 408 225 514 -14 462 107 b 314 357 384 274 351 318 b 278 380 298 372 288 379 b 251 351 268 380 261 372 b 4 -209 156 171 75 -17 b 0 -228 1 -215 0 -222 b 19 -258 0 -240 7 -249 b 102 -314 45 -279 75 -294 b 114 -320 107 -318 111 -320 z m 154 -953 b 130 -933 135 -953 130 -948 l 130 -865 l 128 -865 b 135 -788 130 -838 124 -808 b 203 -769 145 -769 180 -776 b 259 -762 223 -765 242 -762 b 441 -852 330 -762 386 -805 b 449 -867 446 -858 449 -863 b 436 -884 449 -874 444 -878 b 318 -942 402 -914 363 -935 b 154 -953 264 -950 209 -953 z m 245 -1106 b 281 -1104 256 -1106 269 -1106 b 511 -888 400 -1094 511 -1035 b 454 -688 511 -814 504 -744 b 448 -678 449 -685 448 -681 b 454 -667 448 -675 449 -671 b 504 -497 503 -619 507 -559 b 324 -288 500 -383 436 -308 b 295 -287 314 -287 304 -287 b 282 -287 291 -287 287 -287 b 115 -330 223 -287 168 -307 b 94 -366 102 -336 94 -348 l 94 -370 b 96 -435 96 -392 96 -413 b 73 -858 89 -576 71 -717 b 78 -919 73 -878 78 -899 b 72 -950 78 -930 76 -940 b 63 -992 66 -965 63 -978 b 66 -1015 63 -999 65 -1008 b 173 -1104 84 -1106 84 -1106 b 245 -1106 197 -1104 220 -1104 z m 161 -622 b 147 -618 156 -622 151 -621 b 140 -600 141 -612 140 -606 b 144 -564 140 -589 144 -575 b 143 -554 144 -560 144 -557 l 143 -546 b 220 -451 144 -467 143 -465 b 278 -445 239 -446 259 -444 b 418 -497 328 -445 376 -461 b 429 -516 426 -504 429 -510 b 415 -533 429 -521 423 -527 b 219 -608 357 -579 287 -590 b 215 -609 217 -608 216 -609 b 161 -622 197 -609 177 -622 z m 425 6 b 360 20 403 17 382 20 b 274 14 331 20 302 14 l 246 14 l 340 206 b 425 6 369 137 395 75 z m 369 438 b 374 439 370 438 372 438 b 384 462 383 444 384 452 l 384 474 b 390 697 386 547 390 622 b 373 1002 390 799 390 901 l 533 1002 b 560 1001 541 1004 552 1001 b 573 1007 567 1001 572 1002 b 546 1050 579 1025 559 1038 b 536 1056 543 1053 539 1053 b 324 1104 472 1102 397 1104 b 72 1090 238 1104 154 1099 b 55 1093 66 1090 60 1092 b 37 1073 46 1093 37 1089 b 60 1045 37 1061 48 1051 b 203 1001 105 1022 151 1001 b 233 1004 213 1001 223 1002 b 246 1005 238 1004 243 1005 b 272 975 264 1005 272 996 b 272 965 272 972 272 969 b 258 596 264 842 265 719 b 315 474 253 540 272 504 l 343 455 b 369 438 351 448 357 438 z'\n },\n 'timeSig0': {\n 'x_min': 20,\n 'x_max': 513,\n 'y_min': -358.159536277652,\n 'y_max': 359,\n 'ha': 717.159536277652,\n 'o': 'm 341 -516 b 420 -510 367 -516 395 -514 b 675 -338 533 -494 622 -448 b 737 -92 716 -256 734 -171 b 739 -35 739 -73 739 -53 b 680 305 739 86 720 207 b 400 517 622 449 537 517 b 337 514 380 517 359 517 b 289 507 321 511 305 513 b 91 317 192 477 127 412 b 29 9 50 212 29 108 b 217 -458 29 -157 88 -312 b 341 -516 251 -494 291 -518 z m 412 -452 b 359 -425 393 -452 376 -444 b 187 14 242 -301 179 -158 b 268 334 193 127 212 235 b 387 448 295 383 330 428 b 406 452 395 451 400 452 b 428 444 413 452 420 449 b 517 324 471 413 497 372 b 586 -29 560 222 586 86 b 556 -271 586 -112 585 -193 b 468 -422 536 -327 508 -377 b 412 -452 449 -442 431 -452 z'\n },\n 'timeSig1': {\n 'x_min': 20,\n 'x_max': 283,\n 'y_min': -364,\n 'y_max': 366,\n 'ha': 730,\n 'o': 'm 264 -524 b 357 -510 297 -524 325 -516 b 374 -490 369 -508 374 -501 b 380 -438 376 -472 380 -455 l 406 246 b 408 301 408 265 408 282 b 400 445 408 348 405 396 b 288 527 395 491 338 527 b 253 520 276 527 264 526 b 240 508 249 517 245 513 b 49 409 192 445 127 413 b 29 396 33 408 29 403 b 32 380 29 392 30 386 b 59 363 36 366 49 364 b 164 348 95 356 130 348 b 222 357 183 348 203 351 b 238 361 228 360 233 360 b 252 334 248 361 252 353 b 243 59 252 242 249 150 b 219 -490 229 -124 233 -307 b 264 -524 217 -516 232 -524 z'\n },\n 'timeSig2': {\n 'x_min': 20,\n 'x_max': 660.4636303241031,\n 'y_min': -378.7201231608281,\n 'y_max': 382,\n 'ha': 760.720123160828,\n 'o': 'm 99 -543 b 130 -533 111 -550 121 -540 b 255 -448 168 -501 213 -475 b 338 -425 282 -431 310 -425 b 392 -431 356 -425 374 -426 b 485 -462 423 -438 454 -451 b 648 -497 540 -482 595 -497 b 834 -441 711 -497 773 -480 b 950 -242 906 -395 958 -334 b 942 -210 950 -230 950 -215 b 912 -220 932 -204 920 -213 b 861 -264 894 -235 877 -248 b 775 -317 835 -289 808 -305 b 675 -334 742 -328 708 -334 b 510 -295 619 -334 563 -318 b 372 -264 465 -278 420 -264 b 305 -272 350 -264 328 -266 b 331 -242 318 -256 324 -249 b 490 -73 386 -187 438 -131 b 675 340 595 43 664 180 b 677 369 677 350 677 360 b 556 536 677 461 638 508 b 468 550 526 546 497 550 b 297 508 409 550 353 533 b 111 354 220 475 168 412 b 29 197 65 308 29 261 b 32 164 29 187 29 176 b 29 140 33 157 29 147 b 43 125 29 132 32 125 b 73 147 55 125 65 138 b 86 163 79 153 82 158 b 238 320 134 219 183 272 b 425 389 292 367 360 389 b 575 341 480 389 531 373 b 606 298 590 330 606 317 b 600 278 606 292 603 285 b 501 107 576 217 544 158 b 304 -104 439 33 372 -35 b 111 -356 230 -180 167 -265 b 84 -446 92 -386 84 -415 b 86 -481 84 -458 85 -469 b 88 -514 88 -491 88 -503 b 99 -543 89 -526 91 -537 z'\n },\n 'timeSig3': {\n 'x_min': 19.824321427094187,\n 'x_max': 540,\n 'y_min': -392,\n 'y_max': 392,\n 'ha': 784,\n 'o': 'm 216 -540 b 354 -564 264 -556 310 -564 b 605 -465 445 -564 530 -530 b 729 -161 697 -383 729 -275 b 724 -82 729 -135 727 -108 b 589 95 716 -1 670 62 b 523 114 567 102 546 108 b 750 418 606 213 677 315 b 778 503 769 444 778 472 b 773 540 778 514 776 527 b 750 564 769 557 762 564 b 736 562 746 564 742 563 b 641 552 704 553 672 552 b 402 554 562 552 481 554 l 346 554 b 84 546 258 554 170 554 b 36 501 55 543 40 531 b 29 412 30 472 32 442 b 52 384 27 393 32 384 l 56 384 b 210 392 107 389 158 392 l 602 392 b 354 108 523 285 445 192 b 246 -65 300 58 246 12 b 252 -108 246 -78 248 -92 l 252 -111 b 264 -141 251 -122 251 -135 b 291 -132 274 -145 284 -140 b 425 -72 328 -95 377 -84 b 475 -65 442 -68 459 -65 b 592 -108 517 -65 557 -79 b 645 -179 615 -125 645 -147 b 642 -194 645 -184 644 -189 b 485 -376 616 -278 569 -344 b 361 -399 444 -392 402 -399 b 151 -340 289 -399 219 -376 b 88 -275 122 -323 98 -310 b 71 -249 86 -268 85 -249 b 63 -251 68 -249 66 -249 b 36 -288 48 -255 36 -266 b 55 -423 33 -336 45 -377 b 101 -482 60 -448 78 -468 b 216 -540 138 -504 174 -526 z'\n },\n 'timeSig4': {\n 'x_min': 20,\n 'x_max': 633.0785282750762,\n 'y_min': -489.59088556716864,\n 'y_max': 491.18559127100053,\n 'ha': 980.7764768381692,\n 'o': 'm 608 -704 b 641 -684 622 -708 634 -696 b 667 -602 660 -660 662 -631 b 685 -190 683 -465 680 -327 l 685 -176 b 831 -127 736 -166 783 -148 b 912 0 901 -94 913 -76 b 886 53 912 36 904 52 b 848 40 877 53 864 49 l 838 36 b 687 -13 789 14 739 -3 b 681 177 687 50 684 114 b 672 338 678 230 677 285 b 654 373 671 350 672 373 b 622 340 636 373 624 361 b 615 262 621 314 613 288 b 619 -22 616 167 619 72 b 569 -22 602 -23 585 -23 b 305 -3 481 -16 395 -1 b 210 -9 274 -3 242 -4 b 301 163 242 52 268 108 b 513 552 377 288 459 412 b 536 652 526 585 536 618 b 533 683 536 662 534 672 b 520 707 531 691 531 707 b 487 693 508 708 494 704 b 474 668 482 684 477 677 b 384 490 454 603 418 547 b 253 281 343 419 295 351 b 73 -13 194 181 145 78 b 29 -108 50 -42 29 -72 b 37 -147 29 -121 32 -134 b 50 -186 43 -160 50 -173 b 68 -216 52 -207 56 -215 b 92 -207 73 -216 82 -213 b 288 -166 156 -180 220 -166 b 556 -186 377 -166 467 -180 b 586 -189 566 -187 576 -187 b 616 -186 596 -189 606 -189 b 606 -432 613 -268 612 -350 b 596 -625 603 -495 596 -559 b 598 -670 596 -641 596 -655 b 608 -704 598 -683 596 -700 z'\n },\n 'timeSig5': {\n 'x_min': 19.663871085403297,\n 'x_max': 583,\n 'y_min': -389,\n 'y_max': 389,\n 'ha': 778,\n 'o': 'm 132 -536 b 249 -560 168 -553 209 -559 b 507 -462 351 -560 454 -514 b 677 -183 588 -384 642 -289 b 694 -85 688 -150 694 -117 b 540 138 694 12 642 94 b 422 173 501 154 462 167 b 400 187 408 174 400 177 b 405 202 400 190 402 196 b 428 284 416 228 426 255 b 469 312 431 307 442 312 b 757 372 569 312 662 343 b 840 490 821 392 840 432 b 812 560 840 540 834 560 b 763 546 801 560 785 556 b 757 543 762 546 759 544 b 465 484 665 505 570 484 b 396 484 452 484 425 487 b 353 454 377 482 366 474 b 281 300 323 405 304 351 b 245 164 262 255 245 212 b 246 144 245 158 246 151 b 233 63 249 115 243 89 b 225 35 228 50 225 40 b 264 14 225 22 236 19 b 445 -26 325 7 387 0 b 569 -151 501 -52 547 -89 b 575 -180 573 -161 575 -170 b 527 -275 575 -217 547 -245 b 347 -367 484 -334 419 -367 b 261 -351 318 -367 289 -363 b 95 -300 206 -333 154 -307 b 55 -321 73 -297 65 -302 b 29 -468 29 -367 40 -419 b 56 -505 26 -482 36 -500 b 132 -536 82 -514 108 -524 z'\n },\n 'timeSig6': {\n 'x_min': 20,\n 'x_max': 565,\n 'y_min': -363,\n 'y_max': 363,\n 'ha': 726,\n 'o': 'm 390 -518 b 621 -458 469 -507 549 -494 b 814 -134 753 -390 814 -281 b 652 59 814 -16 750 58 b 580 48 629 59 606 55 b 233 -334 392 -9 276 -138 b 115 -228 181 -314 143 -278 b 98 -160 104 -206 98 -183 b 107 -109 98 -144 101 -127 b 167 37 124 -59 145 -12 b 508 340 236 189 347 292 b 575 353 530 347 553 353 b 648 327 600 353 625 346 b 665 320 654 321 661 320 b 687 336 674 320 681 325 b 703 405 697 359 703 382 b 684 472 703 429 697 451 b 593 523 664 504 631 521 b 576 521 588 523 582 523 b 297 403 472 508 380 465 b 115 177 217 344 164 264 b 29 -121 60 82 29 -17 b 53 -278 29 -173 36 -225 b 226 -497 82 -374 131 -454 b 347 -523 265 -514 305 -523 b 390 -518 361 -523 376 -521 z m 351 -357 b 312 -351 337 -356 320 -363 b 325 -315 304 -340 320 -327 b 543 -120 373 -222 448 -158 b 622 -104 570 -108 596 -102 b 717 -132 655 -104 687 -112 b 740 -167 732 -143 740 -153 b 730 -196 740 -176 737 -184 b 563 -321 690 -258 634 -300 b 359 -357 497 -341 428 -354 z'\n },\n 'timeSig7': {\n 'x_min': 20.3617407597707,\n 'x_max': 592,\n 'y_min': -345,\n 'y_max': 345,\n 'ha': 690,\n 'o': 'm 253 -497 b 318 -485 276 -497 297 -487 b 366 -441 348 -482 360 -468 b 487 -104 390 -323 433 -210 b 835 403 580 82 701 246 b 852 436 847 416 852 428 b 815 467 852 451 840 461 b 762 474 798 471 779 474 b 674 445 732 474 701 465 b 603 410 652 431 628 420 b 383 360 533 379 459 360 b 200 435 315 360 249 382 b 88 494 168 469 131 485 b 66 497 81 495 73 497 b 33 484 52 497 39 492 b 50 436 22 469 39 451 b 295 310 114 360 199 324 b 406 301 331 304 369 301 b 593 324 468 301 530 308 b 585 307 589 314 588 310 b 265 -249 451 137 338 -46 b 207 -442 242 -312 223 -377 b 204 -462 206 -449 204 -456 b 253 -497 204 -487 220 -497 z'\n },\n 'timeSig8': {\n 'x_min': 20,\n 'x_max': 504.15101530718516,\n 'y_min': -428,\n 'y_max': 428,\n 'ha': 856,\n 'o': 'm 265 -616 b 289 -615 274 -616 281 -616 b 710 -271 492 -592 657 -485 b 726 -148 721 -229 727 -187 b 585 108 726 -48 687 42 b 572 127 576 114 573 120 b 576 144 572 132 575 138 b 598 301 590 196 598 249 b 586 413 598 338 593 376 b 356 616 559 531 467 616 b 233 582 317 616 275 606 b 29 233 101 505 29 384 b 104 9 29 153 46 72 b 189 -48 127 -16 160 -27 b 92 -158 141 -73 114 -114 b 37 -343 63 -217 50 -279 b 33 -390 35 -359 33 -374 b 265 -616 33 -524 148 -616 z m 328 -438 b 158 -276 233 -436 160 -359 b 166 -239 158 -264 161 -252 b 230 -157 176 -203 202 -179 b 367 -72 274 -125 320 -98 b 448 -49 396 -56 423 -49 b 562 -118 491 -49 528 -72 b 611 -251 590 -157 611 -199 b 569 -341 611 -288 595 -318 b 328 -438 500 -402 416 -432 z m 258 105 b 124 148 215 105 167 117 b 96 196 105 163 96 177 b 99 217 96 202 96 209 b 197 384 120 281 151 337 b 350 451 242 429 297 451 b 516 364 412 451 472 422 b 530 331 523 354 530 343 b 530 327 530 330 530 328 l 530 320 b 468 151 520 261 507 200 b 419 122 455 135 442 125 b 258 105 370 117 320 105 z'\n },\n 'timeSig9': {\n 'x_min': 20,\n 'x_max': 494,\n 'y_min': -421,\n 'y_max': 421,\n 'ha': 842,\n 'o': 'm 235 -606 b 361 -564 275 -606 318 -593 b 619 -229 487 -482 566 -366 b 706 127 664 -114 694 4 b 711 233 708 163 711 197 b 700 346 711 271 708 308 b 389 606 658 517 530 606 b 351 605 376 606 364 606 b 56 272 171 586 56 441 b 96 98 56 216 69 156 b 334 -53 144 -3 238 -53 b 544 36 408 -53 484 -24 b 652 176 586 78 622 124 b 631 71 645 141 639 105 b 467 -302 599 -63 562 -196 b 271 -442 412 -364 354 -422 b 225 -448 255 -446 239 -448 b 95 -305 148 -448 98 -395 b 89 -255 95 -288 94 -271 b 73 -233 86 -246 85 -233 b 52 -248 65 -233 56 -239 b 29 -317 42 -271 30 -291 b 49 -448 29 -361 40 -405 b 235 -606 69 -541 144 -606 z m 340 104 b 144 209 264 108 194 141 b 127 258 132 225 127 240 b 137 297 127 271 130 284 b 366 449 184 396 269 449 b 517 408 415 449 467 436 b 595 348 546 392 572 372 b 616 305 608 336 616 321 b 609 281 616 298 613 289 b 340 104 557 184 477 104 z'\n },\n 'timeSigCommon': {\n 'x_min': 20,\n 'x_max': 585,\n 'y_min': -298,\n 'y_max': 294.49658092772603,\n 'ha': 592.496580927726,\n 'o': 'm 444 -405 b 829 -45 626 -346 740 -207 b 842 26 842 -23 842 1 b 821 58 842 39 841 58 b 795 40 811 58 802 48 b 765 3 785 29 773 16 b 469 -223 690 -104 596 -183 b 354 -242 431 -235 392 -242 b 180 -177 292 -242 235 -223 b 135 -99 154 -157 140 -131 b 132 -59 134 -85 132 -72 b 141 7 132 -37 135 -16 b 449 274 189 160 297 243 b 477 278 459 276 468 276 b 546 203 517 278 539 253 b 517 157 550 177 533 166 b 485 143 507 153 497 143 l 482 143 b 467 148 478 143 472 144 b 374 183 438 170 406 181 b 264 118 333 183 292 161 b 238 48 246 92 238 69 b 261 -9 238 29 245 10 b 383 -73 287 -39 337 -73 b 412 -68 392 -73 402 -72 b 631 164 526 -27 586 59 b 649 252 644 193 649 222 b 636 328 649 278 645 304 b 504 423 615 400 579 429 b 242 318 408 415 317 387 b 29 -158 104 190 29 33 b 30 -176 29 -164 29 -170 b 115 -364 42 -246 52 -315 b 307 -429 177 -410 240 -429 b 444 -405 351 -429 397 -420 z'\n },\n 'timeSigCutCommon': {\n 'x_min': 20,\n 'x_max': 695,\n 'y_min': -687.0379164869064,\n 'y_max': 687,\n 'ha': 1374.0379164869064,\n 'o': 'm 564 -989 b 595 -945 585 -991 589 -963 l 599 -922 b 605 -628 600 -824 603 -726 l 609 -399 b 878 -251 706 -363 798 -320 b 996 -85 932 -204 976 -153 b 1001 -63 998 -78 1001 -71 b 989 -46 1001 -56 998 -49 b 978 -43 985 -45 982 -43 b 950 -59 968 -43 959 -49 b 733 -216 894 -132 815 -177 b 611 -259 694 -235 652 -249 b 616 -20 612 -179 615 -99 b 680 29 642 -7 665 9 b 698 43 685 36 690 40 b 870 251 792 82 840 160 b 877 294 874 265 877 279 b 818 410 877 338 855 382 b 683 458 779 442 730 448 b 625 468 664 462 644 465 l 625 514 b 638 958 626 662 636 811 b 626 989 638 979 635 989 b 603 981 621 989 613 986 b 422 840 534 945 481 888 b 412 805 412 832 413 818 b 426 713 410 773 420 743 b 445 678 429 690 435 678 b 474 691 452 678 461 683 b 563 755 503 710 530 732 b 564 724 564 740 564 733 b 559 469 563 639 560 554 b 462 454 526 469 494 464 b 112 143 302 399 199 281 b 33 -94 66 71 45 -10 b 29 -148 30 -112 29 -131 b 105 -351 29 -223 52 -291 b 359 -455 171 -426 258 -451 b 517 -431 409 -451 464 -446 b 539 -422 524 -428 531 -425 l 539 -477 b 533 -739 536 -563 539 -651 b 530 -824 531 -768 530 -795 b 546 -948 530 -865 533 -907 b 564 -989 552 -962 543 -989 z m 410 -288 b 193 -197 328 -288 253 -264 b 141 -60 160 -161 141 -108 b 157 6 141 -35 147 -12 b 259 158 189 58 217 112 b 438 291 311 215 364 266 b 528 305 468 301 498 305 b 554 304 537 305 546 304 b 553 212 554 274 554 242 b 426 115 498 199 446 164 b 416 68 419 99 416 84 b 425 12 416 49 420 30 b 474 -39 432 -17 448 -32 b 513 -43 487 -42 498 -43 b 547 -40 524 -43 536 -42 l 543 -272 b 461 -285 516 -278 488 -281 b 410 -288 444 -287 426 -288 z m 694 197 b 668 203 685 197 677 199 b 621 216 654 210 638 215 b 622 294 622 242 622 268 b 706 268 651 287 678 278 b 746 235 721 261 734 249 b 752 222 749 230 752 226 b 743 213 752 219 749 215 b 694 197 727 206 711 197 z'\n },\n 'noteheadDoubleWhole': {\n 'x_min': -0.4444444444444444,\n 'x_max': 614.1875,\n 'y_min': -223.03296670127517,\n 'y_max': 223,\n 'ha': 446.0329667012752,\n 'o': 'm 488 -242 b 693 -79 595 -249 685 -166 l 693 -55 b 690 0 693 -36 691 -17 b 540 187 684 84 621 164 b 449 200 508 196 480 200 b 210 104 363 200 282 163 b 186 56 196 92 186 76 b 207 -82 186 9 192 -37 b 300 -204 225 -132 248 -181 b 488 -242 356 -229 415 -240 z m 35 -321 b 62 -266 58 -318 58 -288 l 62 -194 b 63 50 62 -114 63 -32 b 60 189 63 96 63 143 b 43 300 59 226 60 265 b 29 321 40 308 39 321 l 26 321 b 0 292 13 318 0 310 b 0 248 0 278 -1 262 b 6 147 4 215 6 181 b 4 48 6 114 4 81 b 6 0 4 32 6 16 b 7 -36 7 -12 7 -24 l 7 -52 b 6 -156 7 -86 6 -121 b 19 -275 6 -196 9 -236 b 35 -321 23 -291 16 -323 z m 128 -261 b 144 -251 135 -264 141 -256 b 158 -203 156 -236 157 -220 b 161 -137 161 -181 161 -158 b 157 30 161 -81 157 -26 b 158 76 157 45 157 60 l 158 101 b 156 225 158 141 158 183 b 137 253 156 235 154 253 l 134 253 b 109 222 120 251 109 242 b 104 91 108 179 104 134 b 108 -58 104 42 109 -9 b 107 -105 108 -73 108 -89 b 105 -127 107 -112 107 -120 b 118 -245 105 -167 114 -204 b 128 -261 118 -252 121 -259 z m 490 -88 b 449 -86 477 -88 464 -88 b 287 -56 399 -85 341 -78 b 258 -33 275 -52 258 -48 b 282 -7 258 -20 272 -13 b 458 43 340 23 399 43 b 580 14 497 43 537 35 b 618 -20 606 1 619 -9 b 592 -58 618 -30 609 -42 b 490 -88 562 -82 528 -88 z m 757 -291 b 793 -171 796 -255 792 -212 b 795 -49 795 -131 795 -91 b 786 207 795 36 791 121 b 779 240 786 217 783 229 b 766 258 776 246 776 258 b 762 256 765 258 763 256 b 739 236 752 253 740 252 b 733 177 737 216 732 197 b 737 20 737 125 739 73 l 737 -107 b 740 -202 737 -138 739 -170 b 757 -291 740 -230 743 -261 z m 847 -314 b 871 -288 860 -315 867 -300 b 884 -187 881 -255 886 -222 b 876 115 878 -86 876 14 b 877 255 876 161 876 209 b 868 291 877 268 873 279 b 855 304 867 301 863 304 b 844 301 852 304 848 304 b 822 265 825 292 822 278 b 824 251 822 259 822 255 b 822 170 822 225 822 197 l 822 -20 b 835 -284 827 -86 825 -186 b 847 -314 837 -295 835 -311 z'\n },\n 'noteheadWhole': {\n 'x_min': 0,\n 'x_max': 380.16649762501584,\n 'y_min': -186.17102907059297,\n 'y_max': 165,\n 'ha': 351.17102907059297,\n 'o': 'm 547 40 b 223 -268 543 -151 367 -259 b 102 -233 180 -271 143 -248 l 62 -216 b 0 -127 22 -197 0 -166 b 6 -91 0 -115 1 -104 b 122 141 33 -9 69 71 b 327 238 170 204 249 238 b 514 158 397 238 467 212 b 547 40 544 125 549 84 z m 248 -107 b 384 -63 295 -102 341 -88 b 426 -23 402 -53 415 -40 b 435 3 432 -14 435 -6 b 413 32 435 14 428 24 b 301 73 376 49 343 73 b 272 69 291 73 282 72 b 121 -35 207 53 157 20 b 111 -58 117 -42 111 -50 b 125 -75 111 -65 115 -71 b 248 -107 164 -89 202 -107 z'\n },\n 'noteheadHalf': {\n 'x_min': 0,\n 'x_max': 334,\n 'y_min': -174,\n 'y_max': 175,\n 'ha': 349,\n 'o': 'm 480 56 b 167 -251 478 -115 331 -251 b 94 -242 143 -251 118 -248 b 9 -141 43 -229 20 -192 b 0 -68 3 -115 0 -91 b 284 249 0 95 127 200 b 304 252 289 251 297 252 b 481 78 374 252 481 170 b 480 56 481 71 481 63 z m 213 -102 b 399 6 274 -81 341 -48 b 402 17 400 7 402 13 b 399 27 402 22 400 26 b 311 94 373 53 353 88 b 292 95 305 95 300 95 b 130 27 230 95 181 55 b 69 -62 98 9 62 -29 b 161 -98 76 -98 128 -91 b 213 -102 174 -101 186 -101 z'\n },\n 'noteheadBlack': {\n 'x_min': 0,\n 'x_max': 334.04644433966797,\n 'y_min': -164,\n 'y_max': 164,\n 'ha': 328,\n 'o': 'm 112 -233 b 141 -236 122 -235 131 -236 b 481 104 279 -236 485 -48 b 403 222 477 141 478 192 b 334 236 382 232 359 236 b 1 -59 180 236 13 59 b 0 -85 1 -68 0 -76 b 112 -233 0 -157 32 -215 z'\n },\n 'noteheadXWhole': {\n 'x_min': 0,\n 'x_max': 506,\n 'y_min': -143.0823320899293,\n 'y_max': 144,\n 'ha': 287.0823320899293,\n 'o': 'm 53 -206 b 219 -163 117 -207 170 -196 b 314 -102 249 -141 282 -122 b 377 -63 334 -89 356 -76 b 514 -161 422 -96 468 -128 b 576 -196 534 -174 552 -196 b 589 -193 580 -196 585 -196 b 688 -174 625 -194 657 -181 b 711 -158 698 -171 711 -173 b 696 -143 711 -151 701 -147 b 503 -9 632 -98 567 -52 b 485 4 497 -4 491 0 b 704 145 559 49 634 95 b 729 164 711 150 729 151 l 729 168 b 696 196 726 183 710 193 b 621 207 671 202 645 207 b 528 177 589 207 557 200 b 373 76 480 140 426 108 b 246 164 330 104 287 132 b 122 206 207 193 167 203 b 66 192 102 207 72 207 b 99 147 58 173 85 158 b 274 14 157 102 215 58 b 16 -164 184 -42 96 -98 b 0 -179 12 -168 0 -170 b 1 -183 0 -180 0 -183 b 26 -204 6 -193 12 -204 b 53 -206 37 -206 49 -206 z m 611 -177 b 376 -9 530 -118 452 -63 b 164 -143 305 -53 235 -98 b 104 -164 147 -154 130 -164 b 82 -161 96 -164 89 -164 b 230 -65 137 -125 183 -95 l 347 12 b 327 26 341 16 334 22 b 196 121 284 58 239 89 b 163 147 184 128 173 137 b 140 173 154 154 140 163 b 143 180 140 176 141 177 b 179 166 154 194 167 174 b 372 27 243 120 307 73 l 566 153 b 613 171 580 161 596 170 b 635 160 624 171 635 174 b 621 147 635 153 626 150 l 429 24 b 400 6 419 19 409 13 b 569 -117 456 -35 513 -75 b 611 -177 588 -130 608 -143 z'\n },\n 'noteheadXHalf': {\n 'x_min': 0,\n 'x_max': 421,\n 'y_min': -145.51844828189743,\n 'y_max': 151,\n 'ha': 296.51844828189746,\n 'o': 'm 490 -209 b 539 -207 505 -207 521 -207 b 606 -209 560 -207 583 -209 b 598 -196 602 -203 600 -199 b 406 -19 533 -135 469 -78 l 540 130 b 547 144 546 135 547 140 b 536 156 547 148 543 153 b 488 192 518 166 503 176 b 416 217 471 209 444 217 b 323 180 380 217 344 204 l 264 115 b 239 138 256 122 248 131 b 33 197 180 196 108 200 b 3 186 23 197 6 193 b 19 154 -1 174 10 163 b 171 12 69 107 120 59 b 19 -157 120 -45 69 -101 b 0 -177 14 -163 0 -166 b 1 -181 0 -179 0 -180 b 39 -203 9 -197 22 -203 l 186 -203 b 197 -202 190 -202 193 -200 b 213 -202 203 -202 207 -202 b 262 -180 228 -202 246 -199 b 314 -122 279 -161 297 -141 b 490 -209 363 -170 412 -216 z m 435 -148 b 291 -30 379 -112 337 -69 l 213 -118 b 190 -137 207 -125 202 -137 b 145 -111 173 -130 154 -127 b 160 -79 137 -98 151 -88 b 238 16 184 -48 212 -16 b 141 99 204 43 173 72 b 124 117 135 105 130 111 b 115 132 121 121 115 127 b 118 137 115 134 117 137 b 141 132 127 147 135 138 l 253 36 b 347 150 285 75 315 112 b 370 164 354 160 363 163 b 403 145 382 164 393 156 b 416 127 412 140 416 132 b 405 102 416 118 412 111 l 307 -10 b 413 -105 343 -42 379 -73 b 435 -148 425 -115 436 -125 z'\n },\n 'noteheadXBlack': {\n 'x_min': 0,\n 'x_max': 289,\n 'y_min': -156,\n 'y_max': 157,\n 'ha': 313,\n 'o': 'm 23 -225 b 69 -204 40 -223 56 -219 b 137 -131 92 -180 115 -157 l 209 -50 b 377 -197 264 -101 321 -148 b 403 -210 384 -203 393 -210 b 408 -210 405 -210 406 -210 b 416 -192 416 -207 416 -199 b 416 -186 416 -190 416 -187 b 403 -148 416 -171 413 -158 b 344 -81 384 -125 367 -101 b 252 -1 312 -55 282 -29 b 377 157 297 49 340 101 b 402 202 387 170 402 187 b 395 217 402 207 400 213 b 376 226 389 223 382 226 b 334 192 360 226 346 204 b 206 42 289 143 248 94 b 96 161 167 81 131 120 b 60 193 86 174 76 189 b 33 206 52 196 42 206 b 22 199 29 206 26 204 b 10 173 14 190 10 181 b 22 147 10 166 14 157 b 148 7 62 98 104 52 b 164 -7 154 1 158 -3 b 10 -189 111 -66 55 -122 b 0 -212 6 -197 0 -203 b 1 -217 0 -213 0 -216 b 23 -225 4 -226 14 -222 z'\n },\n 'noteheadCircleX': {\n 'x_min': 0,\n 'x_max': 344,\n 'y_min': -179,\n 'y_max': 175.12551922594866,\n 'ha': 354.12551922594866,\n 'o': 'm 99 -210 b 236 -258 137 -242 186 -258 b 418 -183 305 -258 374 -230 b 495 33 475 -120 495 -48 b 494 66 495 45 494 55 b 302 252 487 183 405 256 b 181 243 262 249 222 248 b 46 171 128 236 79 219 b 0 19 14 127 0 73 b 99 -210 0 -68 35 -156 z m 89 -120 b 48 0 56 -82 48 -42 b 89 112 48 35 59 76 b 109 101 96 111 102 108 l 210 7 l 187 -17 b 89 -120 151 -53 125 -82 z m 176 -183 b 127 -163 158 -179 141 -171 l 252 -32 l 372 -144 b 233 -189 334 -173 285 -189 b 176 -183 215 -189 196 -187 z m 245 42 b 124 156 204 79 164 118 b 200 176 145 166 170 173 b 337 183 245 181 291 184 b 377 176 351 183 364 180 b 245 42 333 131 288 86 z m 405 -112 l 392 -99 l 285 3 l 400 121 b 418 154 409 131 418 140 b 465 50 448 130 465 94 b 405 -112 462 -17 439 -73 z'\n },\n 'noteheadTriangleUpWhole': {\n 'x_min': 0,\n 'x_max': 366,\n 'y_min': -145,\n 'y_max': 138,\n 'ha': 283,\n 'o': 'm 55 -209 l 504 -209 b 527 -199 520 -209 527 -206 b 520 -180 527 -193 524 -187 b 459 -94 501 -151 480 -122 b 279 170 400 -6 341 82 b 242 199 266 190 253 199 b 206 167 230 199 219 189 b 10 -145 140 63 76 -42 b 0 -171 3 -156 0 -164 b 23 -200 0 -183 9 -192 b 55 -209 33 -206 45 -209 z m 202 -161 b 176 -137 183 -163 176 -156 b 187 -62 176 -111 179 -86 b 253 95 206 -10 228 42 b 337 -132 307 24 334 -49 b 311 -161 338 -153 334 -161 b 256 -160 294 -161 275 -160 b 202 -161 238 -160 220 -161 z'\n },\n 'noteheadTriangleUpHalf': {\n 'x_min': 0,\n 'x_max': 341.0833130378007,\n 'y_min': -159,\n 'y_max': 159,\n 'ha': 318,\n 'o': 'm 458 -226 b 478 -229 462 -223 469 -229 b 490 -222 482 -229 487 -228 b 477 -184 495 -207 484 -196 b 281 176 410 -65 346 56 b 238 225 269 194 261 213 b 225 229 232 226 228 228 b 209 215 217 229 213 225 b 4 -153 141 92 73 -30 b 0 -170 1 -158 0 -164 b 12 -189 0 -177 4 -183 b 66 -215 27 -202 43 -213 b 458 -226 194 -217 323 -222 z m 278 -170 l 151 -167 b 298 75 204 -89 240 -1 b 301 82 300 76 301 79 b 357 -22 320 48 338 13 b 344 -43 353 -27 350 -37 b 285 -163 317 -79 312 -127 b 278 -170 282 -166 279 -167 z'\n },\n 'noteheadTriangleUpBlack': {\n 'x_min': 0,\n 'x_max': 346,\n 'y_min': -149,\n 'y_max': 149,\n 'ha': 298,\n 'o': 'm 481 -215 b 498 -209 487 -215 492 -215 b 482 -173 498 -194 488 -184 l 284 173 b 259 202 278 184 269 194 b 229 215 248 210 238 215 b 196 189 216 215 206 206 l 13 -150 b 3 -168 9 -156 6 -163 b 0 -180 1 -173 0 -177 b 12 -197 0 -187 4 -193 b 63 -213 29 -206 45 -213 b 481 -215 203 -213 343 -215 z'\n },\n 'noteheadDiamondWhole': {\n 'x_min': 0,\n 'x_max': 271,\n 'y_min': -132,\n 'y_max': 132,\n 'ha': 264,\n 'o': 'm 230 -177 b 256 -190 240 -186 249 -190 b 281 -173 265 -190 272 -184 b 382 -29 314 -124 347 -76 b 390 -10 387 -22 390 -14 b 376 12 390 -3 386 4 b 173 177 308 66 240 121 b 144 190 166 183 160 190 b 98 153 127 186 112 170 b 13 40 69 115 42 76 b 0 13 4 29 0 20 b 22 -19 0 3 7 -9 b 230 -177 92 -69 163 -122 z m 279 -128 b 261 -122 274 -134 266 -127 l 66 30 b 56 45 59 35 56 39 b 62 56 56 48 59 52 b 122 122 91 101 105 122 b 194 76 138 122 158 107 l 320 -26 b 336 -50 325 -32 336 -35 b 279 -128 318 -75 300 -102 z'\n },\n 'noteheadDiamondHalf': {\n 'x_min': 0,\n 'x_max': 295,\n 'y_min': -148,\n 'y_max': 148,\n 'ha': 296,\n 'o': 'm 228 -207 b 245 -213 235 -210 240 -213 b 264 -203 252 -213 258 -210 b 415 -46 314 -150 364 -98 b 425 -27 420 -40 425 -35 b 416 -10 425 -22 422 -16 b 217 200 350 60 284 131 b 194 213 212 207 204 213 b 170 196 181 213 177 203 b 14 33 118 143 68 86 b 0 7 4 23 0 16 b 17 -20 0 -1 6 -10 b 118 -114 52 -50 82 -85 b 228 -207 156 -144 184 -184 z m 209 -157 b 134 -69 177 -138 141 -115 b 130 -26 131 -55 130 -40 b 215 148 130 42 160 99 b 225 156 217 151 220 156 b 230 153 226 156 228 156 b 323 -26 276 104 321 55 b 298 -75 324 -42 315 -59 b 265 -109 287 -86 276 -99 b 209 -157 245 -125 228 -167 z'\n },\n 'noteheadDiamondBlack': {\n 'x_min': 0,\n 'x_max': 310,\n 'y_min': -146,\n 'y_max': 146,\n 'ha': 292,\n 'o': 'm 266 -210 b 289 -194 278 -209 284 -200 b 406 -76 330 -156 367 -115 b 446 -23 433 -49 446 -36 b 412 29 446 -10 435 3 b 405 36 409 30 408 33 b 252 196 354 89 304 143 b 225 210 243 204 235 210 b 204 202 219 210 212 209 b 10 24 141 141 75 82 b 0 9 4 19 0 14 b 9 -6 0 4 3 0 l 232 -192 b 266 -210 242 -200 256 -204 z'\n },\n 'noteheadSquareWhite': {\n 'x_min': 0,\n 'x_max': 350,\n 'y_min': -131,\n 'y_max': 131,\n 'ha': 262,\n 'o': 'm 468 -189 b 485 -187 474 -189 480 -189 b 500 -176 495 -187 500 -183 b 498 -168 500 -174 498 -171 b 497 -166 498 -167 497 -167 l 498 -164 b 504 -154 503 -163 504 -158 b 503 -138 504 -150 503 -144 b 503 -135 503 -137 503 -137 l 503 -94 b 492 66 500 -45 494 10 b 488 135 492 89 488 112 b 484 150 488 141 485 145 b 482 154 482 151 482 153 b 429 189 472 177 456 189 b 53 184 304 186 179 186 l 39 184 b 33 181 36 183 35 183 b 12 160 20 181 12 177 b 0 -109 9 71 4 -19 b 19 -137 0 -125 7 -134 b 23 -151 19 -141 20 -145 b 85 -187 37 -173 55 -187 b 468 -189 212 -187 340 -187 z m 246 -127 l 246 -125 l 63 -125 b 66 -111 65 -122 66 -117 b 73 72 69 -50 71 10 l 73 130 b 88 128 78 128 82 128 b 148 130 108 130 128 130 b 271 128 190 130 230 128 l 271 130 l 420 130 b 428 20 425 92 425 56 l 436 -127 z'\n },\n 'noteheadSquareBlack': {\n 'x_min': 0,\n 'x_max': 342,\n 'y_min': -129.98961937716263,\n 'y_max': 132.44444444444446,\n 'ha': 262.4340638216071,\n 'o': 'm 217 190 b 439 186 304 190 372 190 b 467 180 448 184 458 183 b 492 145 484 176 492 167 b 490 -124 490 56 490 -33 b 488 -141 490 -130 488 -135 b 456 -170 488 -163 478 -168 b 118 -183 344 -176 230 -181 b 29 -184 89 -183 60 -192 b 0 -148 4 -180 0 -168 b 1 29 1 -89 1 -30 b 1 156 1 71 1 114 b 36 190 3 187 4 190 b 217 190 102 192 168 190 z'\n },\n 'augmentationDot': {\n 'x_min': 0,\n 'x_max': 96,\n 'y_min': -57,\n 'y_max': 57,\n 'ha': 114,\n 'o': 'm 13 -82 b 16 -81 14 -82 14 -82 b 105 -73 46 -76 75 -76 b 131 -48 121 -72 131 -60 b 138 26 134 -24 138 0 b 137 48 138 33 138 40 b 108 82 134 71 125 82 b 95 81 104 82 99 82 b 33 71 75 78 53 75 b 4 46 20 68 6 62 b 0 -66 1 9 0 -29 b 13 -82 0 -73 1 -82 z'\n },\n 'tremolo1': {\n 'x_min': -158,\n 'x_max': 156.19381479578487,\n 'y_min': -88,\n 'y_max': 88,\n 'ha': 176,\n 'o': 'm -206 -127 b -194 -125 -203 -127 -199 -127 b 173 -36 -72 -94 50 -65 b 220 16 202 -29 215 -12 b 225 50 223 30 225 45 b 216 107 226 76 222 91 b 194 127 210 120 204 127 b 183 124 192 127 189 127 l -192 33 b -226 -9 -213 27 -222 14 b -228 -32 -226 -16 -228 -23 b -222 -108 -228 -58 -222 -82 b -206 -127 -222 -120 -217 -127 z'\n },\n 'flag8thUp': {\n 'x_min': 0,\n 'x_max': 261,\n 'y_min': -819,\n 'y_max': 0,\n 'ha': 819,\n 'o': 'm 265 -1171 b 351 -1035 301 -1130 336 -1087 b 376 -867 369 -979 376 -923 b 367 -755 376 -829 373 -792 b 233 -422 350 -632 311 -520 b 131 -291 199 -379 166 -334 b 65 -125 91 -239 66 -192 b 62 -75 65 -112 62 -91 b 42 0 62 -49 52 -24 l 35 0 b 0 -63 6 -13 0 -36 l 0 -144 b 96 -445 0 -255 29 -356 b 177 -547 124 -478 150 -514 b 308 -831 246 -629 298 -721 b 317 -890 310 -851 317 -871 b 311 -919 317 -900 315 -910 b 256 -1005 297 -950 282 -984 b 228 -1068 233 -1024 228 -1045 b 230 -1106 228 -1080 229 -1093 b 240 -1162 232 -1125 239 -1143 b 251 -1179 242 -1174 246 -1179 b 265 -1171 255 -1179 259 -1176 z'\n },\n 'flag8thDown': {\n 'x_min': 0,\n 'x_max': 261,\n 'y_min': 0,\n 'y_max': 819,\n 'ha': 819,\n 'o': 'm 265 1171 b 251 1179 259 1176 255 1179 b 240 1162 246 1179 242 1174 b 230 1106 239 1143 232 1125 b 228 1068 229 1093 228 1080 b 256 1005 228 1045 233 1024 b 311 919 282 984 297 950 b 317 890 315 910 317 900 b 308 831 317 871 310 851 b 177 547 298 721 246 629 b 96 445 150 514 124 478 b 0 144 29 356 0 255 l 0 63 b 35 0 0 36 6 13 l 42 0 b 62 75 52 24 62 49 b 59 117 62 91 59 104 b 131 291 60 183 91 239 b 233 422 166 334 199 379 b 367 755 311 520 350 632 b 376 867 373 792 376 829 b 351 1035 376 923 369 979 b 265 1171 336 1087 301 1130 z'\n },\n 'flag16thUp': {\n 'x_min': 0,\n 'x_max': 327.1591498636094,\n 'y_min': -819.3972596310256,\n 'y_max': 0,\n 'ha': 819.3972596310256,\n 'o': 'm 415 -1179 b 435 -1168 423 -1182 429 -1174 b 451 -1138 442 -1159 446 -1149 b 465 -1020 464 -1102 467 -1064 b 461 -962 464 -1004 464 -984 b 471 -821 467 -916 472 -870 b 465 -721 472 -791 467 -756 b 415 -520 459 -651 441 -585 b 200 -245 370 -408 284 -327 b 96 -114 160 -206 118 -168 b 75 -24 84 -85 85 -53 b 59 0 72 -16 72 0 b 53 -1 58 0 56 -1 b 27 -32 40 -6 27 -10 b 29 -68 27 -43 29 -55 b 10 -79 20 -69 13 -72 b 1 -109 6 -89 1 -99 b 0 -170 0 -130 0 -148 b 35 -410 0 -252 12 -333 b 258 -793 76 -557 156 -681 b 409 -1158 350 -896 410 -1014 b 415 -1179 409 -1165 405 -1175 z m 413 -816 b 331 -681 392 -769 364 -723 b 145 -420 266 -596 189 -521 b 86 -281 125 -374 102 -330 b 156 -370 105 -312 128 -343 b 318 -539 210 -425 269 -478 b 413 -816 383 -621 420 -713 z'\n },\n 'flag16thDown': {\n 'x_min': 0,\n 'x_max': 327.1591498636094,\n 'y_min': 0,\n 'y_max': 819,\n 'ha': 819,\n 'o': 'm 59 0 b 75 24 72 0 72 16 b 96 114 85 53 84 85 b 200 245 118 168 160 206 b 415 520 284 327 370 408 b 465 721 441 585 459 651 b 471 821 467 756 472 791 b 461 962 472 870 467 916 b 465 1020 464 984 464 1004 b 451 1138 467 1064 464 1102 b 435 1168 446 1149 442 1159 b 418 1179 431 1172 425 1179 b 415 1179 418 1179 416 1179 b 408 1169 409 1176 408 1174 b 409 1158 408 1165 409 1161 b 258 793 410 1014 350 896 b 35 410 156 681 76 557 b 0 170 12 333 0 252 b 0 88 0 148 0 108 b 29 7 0 71 6 23 b 59 0 33 4 58 0 z m 86 281 b 145 420 102 330 125 374 b 331 681 189 521 266 596 b 413 816 364 723 392 769 b 415 791 413 808 415 799 b 318 539 415 698 377 613 b 156 370 269 478 210 425 b 86 281 128 343 105 312 z'\n },\n 'flag32ndUp': {\n 'x_min': -0.19862981551275186,\n 'x_max': 268.0942440943661,\n 'y_min': -849.4710740978672,\n 'y_max': 149.0769891455102,\n 'ha': 998.5480632433774,\n 'o': 'm 323 -1223 b 351 -1198 337 -1227 344 -1210 b 359 -1184 354 -1194 356 -1188 b 386 -999 377 -1122 387 -1060 b 341 -783 386 -927 372 -855 b 330 -736 334 -769 330 -753 b 333 -708 330 -727 330 -717 b 344 -621 340 -678 344 -649 b 341 -579 344 -608 343 -593 b 328 -500 338 -553 328 -526 b 331 -475 328 -491 328 -484 b 347 -370 343 -438 348 -402 b 151 27 348 -212 288 -56 b 53 176 98 59 50 102 b 45 197 53 183 48 192 b 33 215 40 203 40 216 l 30 215 b 6 194 22 212 9 209 b 0 120 3 170 -1 145 b 0 -43 4 65 0 13 b 0 -98 0 -60 1 -79 b 4 -276 0 -157 6 -216 b 7 -456 4 -337 7 -397 b 66 -638 7 -523 22 -585 b 158 -724 94 -671 127 -697 b 318 -1011 246 -801 295 -899 b 321 -1044 321 -1021 321 -1032 b 312 -1152 321 -1080 312 -1116 b 317 -1192 312 -1165 314 -1179 b 323 -1223 320 -1202 311 -1220 z m 275 -657 b 111 -492 226 -589 163 -547 b 65 -376 78 -456 66 -418 b 71 -323 65 -360 68 -341 b 275 -657 164 -418 265 -504 z m 285 -376 b 121 -180 249 -289 173 -245 b 91 -105 104 -158 92 -135 b 288 -354 181 -144 288 -269 b 285 -376 288 -363 287 -370 z'\n },\n 'flag32ndDown': {\n 'x_min': -2.800802874905624,\n 'x_max': 268.09424409436605,\n 'y_min': -169.07698914551014,\n 'y_max': 829.4710740978672,\n 'ha': 998.5480632433773,\n 'o': 'm 323 1194 b 317 1164 311 1191 320 1174 b 312 1123 314 1151 312 1136 b 321 1015 312 1087 321 1051 b 318 982 321 1004 321 992 b 158 696 295 870 246 772 b 66 609 127 668 94 642 b 7 428 22 556 7 494 b 4 248 7 369 4 308 b -1 78 6 187 -10 137 b 0 14 0 59 0 32 b 0 -148 0 -42 0 -94 b 6 -223 0 -174 3 -199 b 30 -243 9 -238 22 -240 l 33 -243 b 45 -226 40 -245 40 -232 b 53 -204 48 -220 53 -212 b 151 -56 50 -131 98 -88 b 347 341 288 27 348 183 b 331 446 348 373 343 409 b 328 471 328 455 328 462 b 341 550 328 497 338 524 b 344 592 343 564 344 579 b 333 680 344 621 340 649 b 330 707 330 688 330 698 b 341 755 330 724 334 740 b 386 971 372 827 386 899 b 359 1155 387 1031 377 1093 b 351 1169 356 1159 354 1165 b 323 1194 344 1181 337 1198 z m 275 628 b 71 294 265 475 164 389 b 65 347 68 312 65 331 b 111 464 66 389 78 428 b 275 628 163 518 226 560 z m 285 347 b 288 325 287 341 288 334 b 91 76 288 240 181 115 b 121 151 92 107 104 130 b 285 347 173 216 249 261 z'\n },\n 'flag64thUp': {\n 'x_min': -4,\n 'x_max': 282,\n 'y_min': -823.5430338167067,\n 'y_max': 347,\n 'ha': 1170.5430338167066,\n 'o': 'm 350 -1185 b 380 -1162 364 -1189 374 -1175 b 406 -1022 399 -1119 406 -1071 b 359 -798 406 -945 384 -871 b 348 -756 353 -785 348 -772 b 350 -744 348 -753 350 -749 b 363 -621 356 -704 363 -664 b 360 -580 363 -608 363 -593 b 359 -560 359 -573 359 -567 b 373 -490 359 -536 366 -513 b 393 -346 386 -444 393 -395 b 387 -269 393 -320 390 -294 b 348 -127 382 -219 348 -173 b 351 -104 348 -120 348 -111 b 353 -65 351 -91 353 -78 b 341 37 353 -26 348 6 b 226 215 323 108 278 164 b 86 336 181 258 127 288 b 62 395 72 353 62 370 b 42 481 62 423 55 454 b 27 500 37 488 36 500 b 24 498 26 500 26 500 b -1 480 14 497 1 492 b -6 444 -4 467 -6 455 l -6 435 b -1 341 -1 403 -1 372 l -1 266 b 6 156 -1 230 0 193 b 13 35 12 117 13 75 l 13 -35 b 14 -85 13 -52 14 -68 b 29 -276 19 -150 33 -213 b 20 -448 24 -334 20 -392 b 24 -534 20 -477 22 -505 b 114 -708 30 -605 59 -664 b 197 -780 143 -732 171 -755 b 344 -1153 301 -884 341 -1011 b 343 -1172 344 -1159 343 -1166 b 350 -1185 343 -1176 344 -1182 z m 300 -691 b 117 -508 243 -616 168 -575 b 82 -408 94 -480 82 -448 b 84 -379 82 -397 82 -387 b 259 -553 135 -451 206 -492 b 301 -667 287 -583 301 -619 b 300 -691 301 -674 301 -683 z m 298 -410 b 118 -235 238 -351 176 -295 b 76 -88 82 -197 78 -147 b 268 -252 137 -153 203 -202 b 330 -360 304 -279 330 -315 b 323 -402 330 -373 327 -387 b 311 -418 318 -413 315 -418 b 298 -410 307 -418 302 -415 z m 287 -88 b 62 193 186 -17 79 48 b 229 52 121 144 174 98 b 289 -33 256 29 274 -3 b 295 -56 294 -42 295 -49 b 287 -88 295 -66 292 -76 z'\n },\n 'flag64thDown': {\n 'x_min': -5,\n 'x_max': 281,\n 'y_min': -375,\n 'y_max': 795.5430338167066,\n 'ha': 1170.5430338167066,\n 'o': 'm 348 1145 b 341 1132 343 1142 341 1136 b 343 1113 341 1126 343 1119 b 196 740 340 971 300 844 b 112 668 170 714 141 691 b 23 494 58 624 29 564 b 19 408 20 465 19 436 b 27 236 19 351 23 294 b 13 45 32 173 17 109 b 12 -6 13 27 12 12 l 12 -75 b 4 -196 12 -115 10 -157 b -3 -307 -1 -233 -3 -271 l -3 -382 b -7 -475 -3 -412 -3 -444 l -7 -484 b -3 -520 -7 -495 -6 -507 b 23 -539 0 -533 13 -537 b 26 -540 24 -540 24 -540 b 40 -521 35 -540 36 -528 b 60 -435 53 -494 60 -464 b 85 -376 60 -410 71 -393 b 225 -255 125 -328 180 -298 b 340 -78 276 -204 321 -148 b 351 24 347 -46 351 -14 b 350 63 351 37 350 50 b 347 86 347 71 347 79 b 386 229 347 132 380 179 b 392 305 389 253 392 279 b 372 449 392 354 384 403 b 357 520 364 472 357 495 b 359 540 357 527 357 533 b 361 580 361 553 361 567 b 348 704 361 624 354 664 b 347 716 348 708 347 713 b 357 757 347 732 351 744 b 405 982 383 831 405 904 b 379 1122 405 1031 397 1079 b 348 1145 373 1135 363 1149 z m 298 651 b 300 626 300 642 300 634 b 258 513 300 579 285 543 b 82 338 204 452 134 410 b 81 367 81 347 81 357 b 115 468 81 408 92 439 b 298 651 167 534 242 576 z m 297 370 b 310 377 301 374 305 377 b 321 361 314 377 317 373 b 328 320 325 347 328 333 b 266 212 328 275 302 239 b 75 48 202 161 135 112 b 117 194 76 107 81 157 b 297 370 174 255 236 311 z m 285 48 b 294 16 291 36 294 26 b 288 -7 294 9 292 1 b 228 -92 272 -37 255 -69 b 60 -233 173 -138 120 -184 b 285 48 78 -88 184 -23 z'\n },\n 'flag128thUp': {\n 'x_min': 0,\n 'x_max': 252,\n 'y_min': -804,\n 'y_max': 530,\n 'ha': 1334,\n 'o': 'm 298 -1158 b 328 -1126 312 -1158 320 -1139 b 330 -1116 330 -1123 330 -1119 b 347 -996 343 -1076 347 -1037 b 328 -837 347 -943 338 -890 b 320 -778 324 -816 320 -798 b 330 -733 320 -763 323 -749 b 340 -665 338 -714 337 -688 b 341 -645 340 -660 341 -652 b 333 -534 341 -609 333 -572 b 343 -471 333 -513 334 -492 b 361 -366 356 -436 361 -402 b 331 -202 361 -311 348 -256 b 328 -187 330 -197 328 -193 b 331 -179 328 -184 328 -181 b 363 -55 353 -137 363 -96 b 337 79 363 -12 351 33 b 327 114 333 92 327 104 b 344 144 327 124 331 132 b 359 174 353 150 357 163 b 361 228 360 193 361 210 b 243 517 361 337 325 435 b 147 596 213 546 179 569 b 75 708 111 626 75 655 b 62 744 75 723 68 733 b 50 763 58 752 58 763 b 46 762 49 763 48 762 b 17 742 36 757 22 757 b 0 697 14 726 0 711 b 1 595 0 662 3 631 b 0 469 0 552 0 511 b 1 429 0 456 0 442 b 22 289 6 382 22 337 b 24 128 22 238 24 184 b 22 66 24 108 23 86 b 19 -19 20 37 19 10 b 20 -132 19 -56 20 -95 b 13 -276 20 -180 19 -229 b 9 -359 10 -304 9 -330 b 12 -487 9 -402 12 -445 b 56 -582 12 -526 29 -554 b 197 -742 107 -632 160 -681 b 288 -1100 265 -851 276 -976 b 288 -1122 288 -1107 287 -1115 b 287 -1145 289 -1129 287 -1138 b 298 -1158 287 -1153 288 -1158 z m 249 -609 b 69 -357 197 -520 88 -471 b 249 -609 131 -441 229 -498 z m 279 -396 b 132 -223 233 -330 180 -279 b 81 -112 104 -192 81 -156 b 82 -91 81 -105 81 -98 b 279 -396 167 -125 269 -281 z m 271 -73 b 127 72 233 -14 179 26 b 81 167 96 98 81 127 b 84 194 81 176 82 184 b 271 -73 148 102 242 39 z m 304 150 b 75 475 229 256 112 334 b 304 150 233 357 305 287 z'\n },\n 'flag128thDown': {\n 'x_min': -0.8888888888888888,\n 'x_max': 252,\n 'y_min': -580,\n 'y_max': 754,\n 'ha': 1334,\n 'o': 'm 298 1086 b 287 1073 288 1086 287 1081 b 288 1050 287 1066 289 1057 b 288 1028 287 1043 288 1035 b 197 670 276 904 265 779 b 56 510 160 609 107 560 b 12 415 29 482 12 454 b 9 287 12 373 9 330 b 13 204 9 258 10 232 b 20 60 19 157 20 108 b 19 -53 20 23 19 -16 b 22 -138 19 -82 20 -109 b 24 -200 23 -158 24 -180 b 22 -361 24 -256 22 -310 b 1 -501 22 -409 6 -454 b 0 -541 0 -514 0 -528 b 0 -667 0 -583 -3 -624 b 0 -809 0 -675 -3 -791 b 46 -834 4 -825 36 -829 b 50 -835 48 -834 49 -835 b 62 -816 58 -835 58 -824 b 75 -780 68 -805 75 -795 b 147 -668 75 -727 111 -698 b 243 -589 179 -641 213 -618 b 361 -300 325 -507 361 -409 b 359 -246 361 -282 360 -265 b 344 -216 357 -235 353 -222 b 327 -186 331 -204 327 -196 b 337 -151 327 -176 333 -164 b 363 -17 351 -105 363 -60 b 331 107 363 24 353 65 b 328 115 328 109 328 112 b 331 130 328 121 330 125 b 361 294 348 184 361 239 b 343 399 361 330 356 364 b 333 462 334 420 333 441 b 341 573 333 500 341 537 b 340 593 341 580 340 588 b 330 661 337 616 338 642 b 320 706 323 677 320 691 b 328 765 320 726 324 744 b 347 924 338 818 347 871 b 330 1044 347 965 343 1004 b 328 1054 330 1047 330 1051 b 298 1086 320 1067 312 1086 z m 249 537 b 69 285 229 426 131 369 b 249 537 88 399 197 448 z m 279 324 b 82 19 269 209 167 53 b 81 40 81 26 81 33 b 132 151 81 84 104 120 b 279 324 180 207 233 258 z m 271 1 b 84 -266 242 -111 148 -174 b 81 -239 82 -256 81 -248 b 127 -144 81 -199 96 -170 b 271 1 179 -98 233 -58 z m 304 -222 b 75 -547 305 -359 233 -429 b 304 -222 112 -406 229 -328 z'\n },\n 'accidentalFlat': {\n 'x_min': 1,\n 'x_max': 209,\n 'y_min': -208,\n 'y_max': 472,\n 'ha': 680,\n 'o': 'm 29 -300 b 46 -289 33 -300 39 -297 b 107 -243 65 -274 86 -258 b 301 127 233 -153 301 -30 b 298 186 301 147 301 166 b 190 297 291 256 251 297 b 147 289 177 297 163 294 b 86 265 127 284 107 274 l 85 264 l 85 301 b 91 465 85 356 88 410 b 94 559 91 497 94 527 b 84 651 94 589 91 621 b 66 680 81 661 81 680 l 65 680 b 37 645 49 678 37 665 b 33 523 36 605 32 563 l 33 478 b 26 223 33 393 29 308 b 1 -141 22 101 1 -19 b 17 -287 1 -189 4 -239 b 29 -300 20 -295 23 -300 z m 68 -105 b 76 12 71 -68 72 -29 b 81 107 79 43 81 75 l 86 109 b 171 135 114 121 141 135 b 204 128 181 135 193 132 b 238 92 228 120 239 108 b 230 63 238 84 236 75 b 68 -105 193 -10 132 -59 z'\n },\n 'accidentalNatural': {\n 'x_min': 0,\n 'x_max': 213.5,\n 'y_min': -456,\n 'y_max': 462,\n 'ha': 918,\n 'o': 'm 255 -657 b 281 -624 271 -657 275 -636 b 285 -599 282 -615 285 -608 b 292 -300 288 -500 289 -400 b 289 -161 292 -253 289 -207 b 300 128 292 -65 297 32 b 304 168 300 128 302 150 l 304 173 l 305 190 l 305 199 l 307 225 b 304 259 307 229 310 246 b 272 298 297 274 302 305 b 63 266 204 279 134 272 b 72 514 68 348 72 432 b 71 595 72 541 72 567 b 56 665 71 619 66 642 b 17 579 9 651 17 608 b 3 144 19 433 7 289 b 0 -7 1 94 0 43 b 3 -134 0 -50 1 -92 b 7 -219 3 -163 7 -192 b 35 -251 7 -243 17 -251 b 49 -249 39 -251 43 -251 l 223 -223 l 230 -222 l 230 -359 b 223 -516 230 -410 223 -464 b 236 -619 223 -550 226 -585 b 255 -657 240 -634 236 -657 z m 58 -81 l 58 -63 b 55 81 56 -14 53 33 l 56 99 b 85 99 65 99 75 98 b 232 108 134 104 183 107 l 240 109 l 236 66 b 232 -48 235 29 232 -10 b 58 -81 174 -63 115 -73 z'\n },\n 'accidentalSharp': {\n 'x_min': -22,\n 'x_max': 390,\n 'y_min': -384,\n 'y_max': 383,\n 'ha': 767,\n 'o': 'm 202 -553 b 219 -526 213 -552 216 -536 b 226 -471 225 -507 226 -488 b 225 -425 226 -455 225 -441 b 226 -392 225 -415 225 -402 b 233 -305 229 -363 232 -334 l 297 -292 b 331 -469 300 -353 311 -412 b 347 -485 333 -477 338 -485 b 363 -469 356 -487 359 -477 b 374 -418 373 -454 374 -435 b 376 -382 376 -405 376 -393 b 372 -276 376 -347 373 -311 l 455 -259 b 550 -156 534 -243 544 -232 b 550 -109 550 -137 552 -124 b 526 -78 549 -91 541 -78 b 523 -78 524 -78 524 -78 b 507 -79 517 -78 513 -78 b 403 -101 474 -88 438 -95 l 379 -105 b 382 -42 380 -85 380 -63 b 384 96 383 4 384 50 b 503 131 425 107 464 118 b 549 173 524 138 543 150 b 562 249 554 199 562 223 b 554 294 562 264 560 279 b 536 315 549 308 544 315 b 533 315 534 315 534 315 b 517 312 528 315 523 315 b 382 266 472 294 428 279 l 377 344 b 359 531 374 406 372 469 b 348 552 356 539 357 552 b 347 552 348 552 347 552 l 343 552 b 315 528 331 549 317 544 l 315 501 b 320 249 315 416 318 333 l 243 232 b 239 361 243 275 242 318 b 226 425 238 383 238 403 b 199 359 194 409 199 382 b 193 223 196 312 194 268 b 72 202 153 215 112 209 b 4 118 13 192 4 183 b 10 66 0 102 12 84 b 33 29 7 39 14 30 b 48 32 37 29 42 30 b 187 55 95 39 141 46 l 183 -75 b 176 -145 181 -99 179 -122 b 16 -179 122 -156 69 -166 b -32 -232 -14 -186 -32 -197 b -17 -331 -32 -266 -19 -298 b -1 -356 -17 -347 -13 -354 b 12 -353 1 -356 6 -354 b 167 -320 63 -341 115 -331 b 166 -377 166 -338 166 -357 b 189 -526 166 -428 171 -477 b 202 -553 192 -536 189 -553 z m 240 -132 b 243 -37 242 -101 242 -69 b 245 65 245 -3 245 30 b 315 79 269 69 292 73 b 301 -120 308 13 305 -53 z'\n },\n 'accidentalDoubleSharp': {\n 'x_min': 0,\n 'x_max': 287,\n 'y_min': -159,\n 'y_max': 159,\n 'ha': 318,\n 'o': 'm 84 -229 b 107 -216 91 -229 98 -225 b 200 -125 138 -186 167 -154 b 232 -95 212 -115 222 -105 b 347 -189 271 -125 310 -157 b 370 -200 356 -196 363 -200 b 396 -179 380 -200 389 -192 b 412 -102 410 -154 406 -125 b 377 -27 410 -69 400 -46 l 325 14 b 402 91 350 42 374 68 b 413 127 410 96 413 107 b 382 200 409 148 397 176 b 350 229 370 220 360 229 b 314 210 340 229 328 223 b 274 174 300 199 285 187 b 212 104 252 151 232 128 b 92 187 173 132 132 161 b 78 193 86 192 82 193 b 68 190 75 193 72 193 b 48 179 62 186 53 187 b 40 137 43 168 40 154 b 81 16 40 92 56 32 b 107 -3 89 10 98 4 b 14 -94 76 -32 45 -62 b 0 -124 6 -102 0 -114 b 12 -154 0 -134 3 -144 b 62 -215 26 -176 48 -193 b 84 -229 69 -225 76 -229 z'\n },\n 'accidentalDoubleFlat': {\n 'x_min': 0,\n 'x_max': 359,\n 'y_min': -220,\n 'y_max': 446,\n 'ha': 666,\n 'o': 'm 43 -317 b 72 -301 55 -317 63 -310 b 160 -186 108 -268 134 -226 b 236 -60 186 -145 212 -102 b 233 -131 235 -85 233 -108 b 239 -220 233 -161 235 -190 b 259 -246 240 -233 239 -240 b 301 -228 284 -252 291 -238 b 465 -7 369 -163 416 -85 b 517 173 500 48 517 108 b 451 307 517 229 505 284 b 409 315 436 312 422 315 b 331 287 382 315 356 305 b 311 274 324 282 320 274 l 310 274 l 310 566 b 305 621 310 585 312 603 b 294 642 301 628 305 642 l 292 642 b 264 622 282 641 266 636 b 253 575 259 606 256 590 b 246 418 248 523 246 471 b 248 243 246 360 248 302 l 248 187 b 164 238 220 225 193 238 b 85 213 140 238 112 226 b 84 229 85 220 84 225 b 86 315 85 258 86 287 b 81 528 86 386 82 458 b 71 582 81 547 78 566 b 56 603 66 590 68 603 l 53 603 b 23 580 40 600 26 598 b 19 537 20 566 19 552 b 20 514 19 530 19 521 b 26 390 24 472 26 432 b 14 66 26 282 16 174 b 0 -168 13 -12 0 -91 b 12 -279 0 -206 3 -242 b 30 -314 16 -294 14 -308 b 43 -317 35 -317 39 -317 z m 75 -147 b 73 30 75 -86 75 -29 b 118 82 73 62 92 76 b 132 84 124 84 128 84 b 190 52 156 84 174 69 b 193 40 192 49 193 45 b 192 33 193 37 193 35 b 75 -147 157 -30 125 -95 z m 301 -72 b 302 7 302 -45 302 -19 l 302 86 b 351 158 304 121 321 145 b 383 166 361 163 373 166 b 435 143 402 166 419 157 b 445 127 441 138 445 132 b 441 114 445 122 444 118 b 301 -72 397 49 354 -14 z'\n },\n 'accidentalParensLeft': {\n 'x_min': 0,\n 'x_max': 130.18934911242604,\n 'y_min': -270,\n 'y_max': 267.6082500723851,\n 'ha': 537.6082500723851,\n 'o': 'm 107 -389 b 127 -374 114 -389 120 -384 b 141 -347 132 -367 137 -357 b 151 -294 148 -330 151 -311 b 122 -207 151 -265 141 -236 b 63 -65 94 -164 72 -117 b 59 -10 60 -46 59 -27 b 145 223 59 78 94 153 b 187 354 176 262 189 305 b 177 384 187 364 190 380 b 143 373 166 387 153 383 b 124 354 137 367 130 361 b 0 -35 33 240 0 108 l 0 -92 b 85 -372 4 -193 27 -287 b 107 -389 92 -383 99 -389 z'\n },\n 'accidentalParensRight': {\n 'x_min': -0.4444444444444445,\n 'x_max': 139,\n 'y_min': -275,\n 'y_max': 277,\n 'ha': 552,\n 'o': 'm 58 -396 b 96 -354 75 -396 85 -370 b 200 13 168 -238 200 -111 b 153 268 200 109 184 190 b 49 392 131 320 101 364 b 26 399 40 397 33 399 b 0 366 10 399 0 387 b 0 318 -1 350 0 334 l 0 291 b 27 238 -3 266 7 253 b 143 9 105 180 143 98 b 141 -20 143 -1 143 -10 b 63 -225 135 -92 108 -164 b 36 -307 45 -251 36 -278 b 40 -344 36 -320 37 -331 b 42 -356 42 -347 42 -351 b 58 -396 42 -374 37 -396 z'\n },\n 'accidentalQuarterToneFlatStein': {\n 'x_min': 0,\n 'x_max': 208,\n 'y_min': -240,\n 'y_max': 440,\n 'ha': 680,\n 'o': 'm 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z'\n },\n 'accidentalThreeQuarterTonesFlatZimmermann': {\n 'x_min': 0,\n 'x_max': 422,\n 'y_min': -240,\n 'y_max': 440,\n 'ha': 680,\n 'o': 'm 336 -346 b 353 -336 340 -346 346 -343 b 413 -289 372 -320 393 -304 b 608 81 540 -199 608 -76 b 605 140 608 101 608 120 b 497 251 598 210 557 251 b 454 243 484 251 469 248 b 393 219 433 238 413 228 l 392 217 l 392 255 b 397 419 392 310 395 364 b 400 513 397 451 400 481 b 390 605 400 543 397 575 b 373 634 387 615 387 634 l 372 634 b 344 599 356 632 344 619 b 340 477 343 559 338 517 l 340 432 b 333 177 340 347 336 262 b 308 -187 328 55 308 -65 b 324 -333 308 -235 311 -285 b 336 -346 327 -341 330 -346 z m 233 -151 b 71 17 168 -105 108 -56 b 63 46 65 29 63 37 b 96 82 62 62 73 73 b 130 89 108 86 120 89 b 215 63 160 89 187 75 l 220 60 b 225 -35 220 29 222 -3 b 233 -151 229 -75 230 -114 z m 272 -346 b 284 -333 278 -346 281 -341 b 300 -187 297 -285 300 -235 b 275 177 300 -65 279 55 b 268 432 272 262 268 347 l 268 477 b 264 599 269 517 265 559 b 236 634 264 619 252 632 l 235 634 b 217 605 220 634 220 615 b 207 513 210 575 207 543 b 210 419 207 481 210 451 b 216 255 213 364 216 310 l 216 217 l 215 219 b 154 243 194 228 174 238 b 111 251 138 248 124 251 b 3 140 50 251 10 210 b 0 81 0 120 0 101 b 194 -289 0 -76 68 -199 b 255 -336 215 -304 236 -320 b 272 -346 262 -343 268 -346 z m 374 -151 b 383 -35 377 -114 379 -75 b 387 60 386 -3 387 29 l 393 63 b 478 89 420 75 448 89 b 511 82 488 89 500 86 b 544 46 534 73 546 62 b 537 17 544 37 543 29 b 374 -151 500 -56 439 -105 z'\n },\n 'accidentalQuarterToneSharpStein': {\n 'x_min': 0,\n 'x_max': 300,\n 'y_min': -338,\n 'y_max': 351,\n 'ha': 689,\n 'o': 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 b 35 66 29 66 32 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z'\n },\n 'accidentalThreeQuarterTonesSharpStein': {\n 'x_min': -23,\n 'x_max': 388,\n 'y_min': -373,\n 'y_max': 445,\n 'ha': 818,\n 'o': 'm 114 -537 b 138 -475 137 -518 138 -495 b 147 -292 138 -413 144 -353 b 212 -278 168 -287 190 -282 b 243 -444 215 -333 225 -389 b 261 -467 248 -454 251 -465 b 281 -446 272 -469 276 -455 b 292 -347 292 -416 288 -384 b 288 -262 289 -320 288 -291 l 374 -245 b 376 -311 374 -266 374 -288 b 390 -456 379 -357 379 -405 b 416 -396 412 -436 415 -418 b 423 -287 420 -360 423 -323 b 422 -235 423 -269 423 -252 b 451 -229 432 -233 441 -232 b 547 -98 524 -215 547 -199 l 547 -89 b 521 -49 546 -59 540 -49 b 497 -52 516 -49 507 -49 b 418 -68 469 -56 444 -63 b 423 52 419 -29 422 12 b 426 140 425 81 425 109 b 495 160 449 145 472 153 b 552 219 526 170 546 189 b 559 279 557 240 553 262 b 530 341 559 324 552 341 b 490 331 520 341 507 338 b 432 311 471 324 452 318 b 449 552 436 392 442 471 b 452 588 451 563 452 575 b 446 622 452 599 451 611 b 436 641 444 629 448 641 b 418 628 428 641 420 636 b 409 602 413 621 410 611 b 386 297 396 501 390 399 b 297 274 356 288 327 281 b 291 403 295 317 294 360 b 274 550 288 452 284 501 b 259 569 271 564 265 569 b 240 559 253 569 248 563 b 230 537 232 554 230 546 l 230 488 b 233 369 230 448 232 409 b 236 261 236 333 238 297 b 156 245 210 255 183 251 b 154 396 154 295 154 346 b 150 416 154 403 153 410 b 140 438 145 423 150 438 l 138 438 b 118 413 128 436 118 428 b 112 354 118 393 114 374 b 109 238 109 315 109 276 b 49 226 89 233 69 230 b 3 163 16 222 3 202 b 7 91 3 138 9 114 b 29 62 7 69 13 62 b 39 63 32 62 35 63 b 104 73 60 66 82 71 b 101 -10 104 46 102 17 l 92 -132 l 10 -150 b -33 -204 -19 -157 -33 -170 b -19 -310 -32 -240 -19 -274 b -6 -324 -19 -321 -13 -324 b 6 -323 -1 -324 1 -324 b 82 -307 32 -317 58 -311 b 81 -376 82 -330 81 -353 b 114 -537 81 -431 94 -484 z m 154 -120 b 157 20 154 -73 156 -26 b 158 82 158 40 158 62 b 230 95 183 86 206 89 b 225 0 229 63 226 32 b 217 -107 223 -35 220 -71 z m 294 -92 b 297 -37 295 -73 295 -56 b 300 49 300 -9 300 20 b 300 108 300 69 300 88 b 379 127 325 114 353 120 b 374 -76 376 59 374 -9 b 294 -92 347 -82 320 -86 z'\n },\n 'accidentalBuyukMucennebFlat': {\n 'x_min': 1.8692317181955784,\n 'x_max': 287,\n 'y_min': -248,\n 'y_max': 432.4720949426819,\n 'ha': 680.4720949426819,\n 'o': 'm 410 128 b 302 239 403 199 363 239 b 259 232 289 239 275 236 b 199 207 239 226 219 216 l 197 206 l 197 243 b 197 251 197 246 197 248 b 347 317 248 272 298 295 b 376 347 360 324 372 334 b 389 435 387 376 393 405 b 348 454 384 462 377 465 b 202 387 300 432 251 409 b 203 408 203 395 203 402 b 203 431 203 416 203 423 b 347 490 252 451 300 469 b 376 517 360 495 372 505 b 389 599 387 546 393 572 b 348 616 384 625 377 628 b 203 556 300 596 251 576 b 196 593 202 569 199 582 b 179 622 193 603 193 622 l 177 622 b 150 588 161 621 150 608 b 147 533 150 570 148 552 b 29 488 108 517 69 503 b 3 455 12 482 3 472 b 12 353 1 422 9 389 b 145 408 56 372 101 389 b 145 363 145 392 145 377 b 29 315 107 347 68 331 b 3 281 12 310 3 298 b 12 170 1 245 9 209 b 141 226 55 189 98 207 b 138 166 140 206 138 186 b 114 -199 134 43 115 -76 b 130 -344 114 -246 117 -297 b 141 -357 132 -353 135 -357 b 158 -347 145 -357 151 -354 b 219 -301 177 -331 199 -315 b 413 69 346 -210 413 -88 b 410 128 413 89 413 108 z m 350 35 b 343 6 350 26 348 17 b 180 -163 308 -69 245 -117 b 189 -46 183 -125 184 -86 b 193 49 192 -14 193 17 l 199 52 b 284 78 226 63 253 78 b 317 71 294 78 305 75 b 350 35 340 62 351 50 z'\n },\n 'accidentalBakiyeFlat': {\n 'x_min': 1.8692317181955784,\n 'x_max': 287,\n 'y_min': -236,\n 'y_max': 444,\n 'ha': 680,\n 'o': 'm 141 -340 b 158 -330 145 -340 151 -337 b 219 -284 177 -314 199 -298 b 413 86 346 -193 413 -71 b 410 145 413 107 413 125 b 302 256 403 216 363 256 b 259 249 289 256 275 253 b 199 225 239 243 219 233 l 197 223 l 197 261 b 199 334 197 285 199 310 b 347 406 249 357 298 382 b 376 439 360 413 372 425 b 390 516 384 465 390 490 b 389 537 390 523 390 530 b 372 564 384 556 382 564 b 348 557 367 564 359 562 b 204 487 300 537 253 510 b 206 518 206 497 206 507 b 196 611 206 549 203 580 b 179 639 193 621 193 639 l 177 639 b 150 605 161 638 150 625 b 145 482 148 564 144 523 l 145 458 b 29 405 107 439 68 420 b 3 366 12 397 3 386 b 12 243 1 325 9 287 b 143 307 56 265 99 285 l 138 183 b 114 -181 134 60 114 -59 b 130 -327 114 -229 117 -279 b 141 -340 132 -336 135 -340 z m 180 -145 b 189 -29 183 -108 184 -69 b 193 66 192 3 193 35 l 199 69 b 284 95 226 81 253 95 b 317 88 294 95 305 92 b 350 52 340 79 351 68 b 343 23 350 43 348 35 b 180 -145 305 -50 245 -99 z'\n },\n 'accidentalKomaSharp': {\n 'x_min': 0,\n 'x_max': 300,\n 'y_min': -338,\n 'y_max': 351,\n 'ha': 689,\n 'o': 'm 194 -487 b 225 -432 215 -469 223 -452 b 238 -232 229 -366 236 -298 b 377 -199 285 -220 331 -209 b 418 -164 397 -193 410 -181 b 432 -88 428 -138 432 -114 b 412 -42 432 -55 428 -42 b 389 -46 406 -42 399 -43 l 235 -85 b 233 -20 235 -63 233 -42 b 233 105 232 22 233 63 b 312 121 259 111 285 117 b 406 226 390 134 400 145 b 373 284 409 268 402 284 b 344 281 364 284 356 282 b 232 258 307 276 269 266 b 230 308 232 275 232 291 b 210 505 229 374 232 441 b 183 471 189 501 184 490 b 180 406 181 449 180 428 b 184 246 180 353 184 300 b 48 222 140 236 94 228 b 0 168 6 216 0 209 b 7 86 1 141 4 114 b 27 66 9 73 13 66 b 35 66 29 66 32 66 b 184 94 85 66 135 84 b 187 -1 184 62 186 30 b 190 -96 189 -33 190 -65 l 112 -114 b 35 -213 27 -132 35 -132 b 33 -253 35 -226 35 -240 b 49 -276 33 -269 37 -276 b 62 -275 52 -276 56 -276 l 186 -245 l 186 -256 b 179 -387 180 -300 177 -343 b 194 -487 180 -419 179 -454 z'\n },\n 'accidentalKucukMucennebSharp': {\n 'x_min': -0.15206251809627475,\n 'x_max': 359,\n 'y_min': -420,\n 'y_max': 343,\n 'ha': 763,\n 'o': 'm 236 -605 b 262 -543 256 -583 261 -564 b 269 -423 268 -503 269 -464 b 266 -340 269 -396 268 -367 l 361 -318 b 405 -276 384 -312 399 -298 b 413 -189 412 -248 416 -219 b 395 -164 412 -171 409 -164 b 382 -166 392 -164 387 -164 b 264 -193 343 -176 304 -184 b 269 -102 265 -163 268 -132 b 454 -62 331 -89 392 -78 b 501 -23 477 -58 494 -45 b 517 62 511 6 517 33 b 487 112 517 95 513 112 b 471 111 482 112 477 112 b 274 66 406 95 340 81 b 276 138 275 91 276 114 b 350 154 301 144 325 148 b 402 203 377 160 396 176 b 412 284 408 230 412 258 b 392 311 412 302 406 311 b 372 308 386 311 379 310 b 287 291 343 301 314 297 l 295 405 b 298 441 297 416 298 428 b 292 475 298 452 297 464 b 282 494 289 482 294 494 b 264 481 274 494 266 490 b 255 455 259 474 256 464 b 239 282 248 397 243 340 b 148 268 209 278 179 274 b 62 164 62 252 62 253 l 62 132 b 79 108 60 117 65 108 l 86 108 l 230 130 b 229 92 230 118 229 105 b 228 56 228 79 228 68 b 66 20 173 43 120 32 b 0 -59 6 7 3 1 l 0 -138 b 14 -160 -1 -156 4 -160 b 27 -158 19 -160 23 -160 b 222 -112 92 -141 157 -127 b 220 -203 220 -143 220 -173 b 147 -217 196 -207 171 -213 b 89 -288 92 -228 89 -229 b 95 -347 85 -305 96 -325 b 112 -374 92 -366 98 -374 b 125 -373 117 -374 121 -374 l 220 -351 b 222 -458 220 -386 220 -422 b 236 -605 223 -504 225 -552 z'\n },\n 'accidentalKoron': {\n 'x_min': 0,\n 'x_max': 303,\n 'y_min': -462.4598053473055,\n 'y_max': 180,\n 'ha': 642.4598053473055,\n 'o': 'm 59 -665 b 72 -649 69 -662 72 -657 b 69 -626 72 -642 69 -634 b 69 -622 69 -625 69 -624 b 69 -600 69 -615 69 -608 b 55 -156 60 -456 68 -311 b 86 -170 66 -166 76 -170 b 112 -163 95 -170 104 -166 b 390 -35 204 -120 298 -78 b 436 -1 409 -27 436 -27 b 396 46 436 22 413 33 l 382 55 b 46 243 271 121 157 179 b 12 259 29 253 17 259 b 0 219 1 259 0 248 b 3 -372 0 22 3 -176 b 6 -616 3 -454 6 -536 b 59 -665 6 -638 40 -671 z m 55 -118 l 55 199 b 363 24 156 141 258 84 b 55 -118 259 -24 160 -69 z'\n },\n 'accidentalSori': {\n 'x_min': 0,\n 'x_max': 434,\n 'y_min': -295,\n 'y_max': 325,\n 'ha': 620,\n 'o': 'm 194 -425 b 196 -409 194 -418 196 -413 b 194 -194 196 -337 196 -266 b 364 -127 251 -171 308 -150 b 361 -321 363 -192 364 -256 b 410 -387 360 -357 373 -377 b 413 -373 412 -382 413 -377 b 418 -114 418 -287 418 -200 l 418 -105 b 595 -35 477 -82 536 -59 b 625 0 612 -27 625 -22 b 593 48 624 23 618 39 l 419 117 b 423 370 419 202 423 285 b 426 403 423 382 426 393 b 418 436 426 415 425 426 b 384 468 409 449 399 468 b 369 448 370 468 369 459 b 369 436 369 444 369 441 b 369 428 369 433 369 431 l 369 423 b 367 138 369 328 367 233 l 353 143 l 192 207 l 192 367 b 173 406 192 383 184 396 b 151 422 167 413 160 422 b 144 420 148 422 147 422 b 137 403 138 416 137 410 b 137 392 137 399 137 396 l 137 229 b 33 271 102 243 68 256 b 13 276 26 274 19 276 b 0 262 6 276 0 272 b 35 199 1 239 0 212 l 138 160 b 140 -148 138 58 138 -45 b 56 -181 111 -158 84 -170 b 24 -215 35 -189 24 -199 b 29 -235 24 -220 26 -228 b 49 -253 35 -249 42 -253 b 78 -240 59 -253 69 -243 b 140 -216 98 -233 120 -225 l 140 -356 b 194 -425 140 -406 141 -406 z m 194 -125 b 193 138 194 -37 193 50 b 315 89 233 122 275 107 b 366 71 333 84 350 76 b 364 -58 366 27 366 -16 b 194 -125 308 -81 251 -104 z m 419 -36 l 419 49 l 526 7 l 485 -10 z'\n },\n 'articAccentAbove': {\n 'x_min': 0,\n 'x_max': 425,\n 'y_min': 0,\n 'y_max': 326,\n 'ha': 326,\n 'o': 'm 27 1 b 78 12 46 0 62 6 b 347 112 168 45 253 91 b 521 184 409 128 459 167 b 608 259 557 194 589 220 b 612 274 611 265 612 271 b 598 292 612 281 608 287 b 477 347 559 312 518 331 b 176 465 374 384 275 425 b 156 469 168 468 161 469 b 125 456 145 469 137 465 b 53 370 96 432 78 399 b 45 353 48 363 45 357 b 68 333 45 344 52 337 b 360 225 166 298 262 261 b 192 154 302 203 249 171 b 13 36 120 132 53 105 b 0 13 9 29 0 22 b 0 9 0 12 0 10 b 16 0 3 1 10 0 l 26 0 b 27 1 27 0 27 0 z'\n },\n 'articAccentBelow': {\n 'x_min': 0,\n 'x_max': 425,\n 'y_min': -326,\n 'y_max': 0,\n 'ha': 326,\n 'o': 'm 16 -469 l 26 -469 b 27 -469 27 -469 27 -469 b 78 -458 46 -469 62 -464 b 347 -357 168 -426 253 -380 b 521 -285 409 -341 459 -302 b 608 -210 557 -276 589 -249 b 612 -196 611 -204 612 -200 b 598 -179 612 -189 608 -183 b 477 -122 559 -157 518 -138 b 176 -4 374 -85 275 -45 b 156 0 168 -1 161 0 b 125 -13 145 0 137 -4 b 53 -99 96 -37 78 -71 b 45 -117 48 -107 45 -112 b 68 -137 45 -125 52 -132 b 360 -245 166 -171 262 -209 b 192 -315 302 -266 249 -300 b 13 -433 120 -337 53 -366 b 0 -456 9 -442 0 -448 b 0 -461 0 -458 0 -459 b 16 -469 3 -468 10 -469 z'\n },\n 'articTenutoAbove': {\n 'x_min': 0.35192668236256364,\n 'x_max': 471.1238660564107,\n 'y_min': 0,\n 'y_max': 56,\n 'ha': 56,\n 'o': 'm 137 0 b 197 1 156 0 179 1 b 409 6 268 1 338 6 b 482 4 432 6 459 6 b 556 0 508 3 534 0 b 651 10 588 0 621 3 b 678 27 662 12 678 10 b 654 59 680 45 672 53 b 511 75 606 73 560 73 b 255 81 426 78 341 81 b 160 79 222 81 193 79 l 36 79 b 1 71 24 78 7 85 b 19 32 -3 56 9 43 b 45 16 26 24 36 20 b 137 0 76 3 108 0 z'\n },\n 'articTenutoBelow': {\n 'x_min': 0.35192668236256364,\n 'x_max': 471.1238660564107,\n 'y_min': -59,\n 'y_max': -3,\n 'ha': 56,\n 'o': 'm 137 -85 b 197 -84 156 -85 179 -84 b 409 -79 268 -84 338 -79 b 482 -81 432 -79 459 -79 b 556 -85 508 -82 534 -85 b 651 -75 588 -85 621 -82 b 678 -58 662 -73 678 -75 b 654 -26 680 -40 672 -32 b 511 -10 606 -12 560 -12 b 255 -4 426 -7 341 -4 b 160 -6 222 -4 193 -6 l 36 -6 b 1 -14 24 -7 7 0 b 19 -53 -3 -29 9 -42 b 45 -69 26 -60 36 -65 b 137 -85 76 -82 108 -85 z'\n },\n 'articStaccatoAbove': {\n 'x_min': 1.4151102965496913,\n 'x_max': 112,\n 'y_min': 0,\n 'y_max': 156,\n 'ha': 156,\n 'o': 'm 98 0 b 132 23 109 0 122 7 b 161 112 150 50 161 79 b 158 148 161 124 161 137 b 125 186 154 167 131 167 b 63 225 117 215 85 216 b 23 197 45 222 30 219 b 3 91 12 163 12 127 b 19 66 0 79 4 69 b 65 27 40 62 53 46 b 98 0 76 9 88 0 z'\n },\n 'articStaccatoBelow': {\n 'x_min': 1.4151102965496913,\n 'x_max': 112.08403222864916,\n 'y_min': -156,\n 'y_max': 0,\n 'ha': 156,\n 'o': 'm 132 -202 b 161 -112 151 -174 163 -145 b 158 -76 161 -101 161 -88 b 125 -39 153 -58 131 -58 b 63 0 115 -10 85 -9 b 23 -27 45 -3 30 -6 b 3 -134 12 -62 10 -98 b 19 -158 0 -145 4 -156 b 65 -197 40 -164 53 -179 b 98 -225 75 -216 88 -225 b 132 -202 109 -225 122 -217 z'\n },\n 'articStaccatissimoAbove': {\n 'x_min': 0,\n 'x_max': 139,\n 'y_min': 0,\n 'y_max': 411,\n 'ha': 411,\n 'o': 'm 96 0 l 104 0 b 144 115 143 29 138 75 b 197 423 158 217 180 320 b 200 454 199 433 200 444 b 181 540 200 482 193 513 b 112 592 167 573 141 592 b 55 567 92 592 72 585 b 0 490 32 546 3 527 l 0 484 b 27 279 14 416 14 347 b 84 20 43 193 52 104 b 96 0 86 13 92 6 z'\n },\n 'articStaccatissimoBelow': {\n 'x_min': 0,\n 'x_max': 139,\n 'y_min': -411,\n 'y_max': 0,\n 'ha': 411,\n 'o': 'm 88 -592 b 145 -567 108 -592 128 -585 b 200 -490 168 -546 197 -527 l 200 -484 b 173 -279 186 -416 186 -347 b 117 -20 157 -193 148 -104 b 104 0 114 -13 108 -6 l 96 0 b 56 -115 58 -29 62 -75 b 3 -423 42 -217 20 -320 b 0 -454 1 -433 0 -444 b 19 -540 0 -482 7 -513 b 88 -592 33 -573 59 -592 z'\n },\n 'articMarcatoAbove': {\n 'x_min': 0.04121419527862119,\n 'x_max': 396,\n 'y_min': 0,\n 'y_max': 328.0000000000001,\n 'ha': 328.0000000000001,\n 'o': 'm 477 0 b 510 13 488 0 500 6 b 570 124 546 40 563 81 b 547 183 570 147 560 166 b 356 422 487 265 405 330 b 346 442 354 429 350 436 l 346 444 b 318 465 340 456 330 464 l 312 469 b 274 449 294 480 284 461 b 242 413 262 438 253 425 b 56 196 177 343 112 274 b 1 56 26 154 13 105 b 27 20 -4 35 9 20 b 42 23 32 20 37 20 b 84 53 59 29 72 39 b 255 269 141 125 193 200 b 275 229 262 255 266 242 b 448 14 324 151 390 86 b 477 0 456 4 467 0 z'\n },\n 'articMarcatoBelow': {\n 'x_min': 0,\n 'x_max': 395.9587858047214,\n 'y_min': -328.0000000000001,\n 'y_max': 0,\n 'ha': 328.0000000000001,\n 'o': 'm 258 -469 b 297 -449 276 -480 287 -461 b 328 -413 308 -438 317 -425 b 514 -196 393 -343 458 -274 b 569 -56 544 -154 557 -105 b 543 -20 575 -35 562 -20 b 528 -23 539 -20 533 -20 b 487 -53 511 -29 498 -39 b 315 -269 429 -125 377 -200 b 295 -229 308 -255 304 -242 b 122 -14 246 -151 180 -86 b 94 0 114 -4 104 0 b 60 -13 82 0 71 -6 b 0 -124 24 -40 7 -81 b 23 -183 0 -147 10 -166 b 215 -422 84 -265 166 -330 b 225 -442 216 -429 220 -436 l 225 -444 b 252 -465 230 -456 240 -464 z'\n },\n 'fermataAbove': {\n 'x_min': -0.04550444040404433,\n 'x_max': 472,\n 'y_min': 2.015071727506986,\n 'y_max': 454,\n 'ha': 451.984928272493,\n 'o': 'm 39 10 b 78 108 66 37 71 73 b 163 311 92 181 111 252 b 284 423 199 353 239 392 b 373 458 312 444 340 454 b 433 431 395 458 410 446 b 603 153 530 361 596 276 b 595 121 603 144 595 131 l 595 88 b 602 50 596 75 589 55 b 639 73 619 43 631 60 b 651 102 645 82 648 92 b 667 194 660 132 662 163 b 680 278 671 222 672 248 b 560 567 680 386 638 481 b 396 654 508 625 452 649 b 291 632 364 654 325 644 b 161 526 235 613 200 566 b 4 249 85 446 26 357 b 4 174 0 222 -3 196 b 10 19 4 124 4 69 b 29 4 12 6 16 0 b 39 10 35 4 33 4 z m 338 37 b 370 40 350 36 357 36 b 380 75 387 40 380 43 b 389 94 382 79 382 85 b 356 132 389 111 374 122 b 269 154 328 147 300 156 b 225 125 252 154 228 157 b 261 48 222 81 232 56 b 338 37 287 40 312 40 z'\n },\n 'fermataBelow': {\n 'x_min': -0.310835055998654,\n 'x_max': 518.570567335755,\n 'y_min': -430,\n 'y_max': -0.9161449836506543,\n 'ha': 429.08385501634933,\n 'o': 'm 344 -615 b 500 -543 402 -602 452 -576 b 713 -253 605 -471 661 -364 b 746 -98 737 -204 750 -153 b 727 -59 744 -82 744 -59 b 688 -88 711 -59 694 -68 b 678 -109 687 -96 683 -102 b 562 -314 648 -183 611 -252 b 387 -439 516 -373 458 -416 b 328 -449 367 -446 347 -449 b 180 -386 274 -449 225 -423 b 69 -179 111 -330 69 -262 b 75 -121 69 -160 71 -141 b 84 -58 78 -101 84 -79 b 82 -39 84 -52 84 -45 b 68 -1 79 -26 82 -4 b 26 -32 49 0 33 -12 b 20 -52 24 -39 22 -45 b 0 -223 9 -107 -3 -161 b 141 -553 1 -348 27 -468 b 304 -619 192 -590 243 -619 b 344 -615 317 -619 330 -618 z m 415 -190 b 435 -157 429 -192 435 -184 b 308 -27 435 -86 379 -27 b 271 -46 287 -27 272 -35 b 269 -69 269 -55 269 -62 b 364 -183 269 -128 302 -170 z'\n },\n 'breathMarkComma': {\n 'x_min': 0,\n 'x_max': 148,\n 'y_min': 0,\n 'y_max': 275,\n 'ha': 275,\n 'o': 'm 120 0 b 187 78 156 20 174 48 b 213 209 206 121 213 164 b 206 294 213 238 210 265 b 140 390 200 337 171 367 b 122 396 134 395 128 396 b 68 382 105 396 85 384 b 46 379 60 382 53 382 b 0 328 12 369 0 357 b 1 311 0 323 1 317 b 30 210 4 275 22 243 b 66 167 39 179 46 167 b 94 171 73 167 82 168 b 143 180 109 174 124 180 b 160 179 148 180 154 180 b 120 66 124 145 120 107 b 120 0 120 45 121 23 z'\n },\n 'breathMarkUpbow': {\n 'x_min': 0,\n 'x_max': 254,\n 'y_min': 0,\n 'y_max': 595,\n 'ha': 595,\n 'o': 'm 233 0 b 256 48 251 14 253 30 b 272 183 264 92 265 138 b 311 455 289 274 295 364 b 350 716 327 541 341 628 b 366 815 354 749 366 782 b 359 857 366 829 363 842 b 327 815 334 852 330 832 b 302 674 315 769 310 721 b 248 357 288 567 269 462 b 225 226 240 314 242 268 b 210 251 212 232 213 243 b 69 721 163 408 117 564 b 32 835 58 760 53 801 b 20 851 29 841 27 851 b 14 850 19 851 16 851 b 0 828 6 847 0 838 l 0 825 b 12 765 1 804 7 785 b 194 125 73 552 132 338 b 233 0 206 84 213 42 z'\n },\n 'caesura': {\n 'x_min': 0,\n 'x_max': 565.5831864753837,\n 'y_min': -0.09016994374947417,\n 'y_max': 562.4481112129314,\n 'ha': 562.5382811566809,\n 'o': 'm 226 1 b 248 13 238 -4 243 7 l 353 137 b 759 638 490 302 632 464 b 814 805 795 688 819 740 b 779 786 796 805 788 796 b 628 609 724 732 678 668 b 310 242 523 485 416 363 b 217 69 265 190 217 140 b 222 30 217 58 219 45 b 222 23 222 29 220 26 b 220 12 222 20 220 16 b 226 1 220 7 222 3 z m 0 76 b 49 122 24 92 37 107 b 444 613 180 287 305 455 b 528 770 484 660 518 708 b 531 792 530 778 531 785 b 524 808 531 799 530 805 b 490 792 513 815 498 802 b 390 683 456 756 420 721 b 48 262 275 543 164 400 b 0 76 0 207 7 145 z'\n },\n 'caesuraCurved': {\n 'x_min': 0,\n 'x_max': 386,\n 'y_min': -10,\n 'y_max': 584,\n 'ha': 594,\n 'o': 'm 180 -14 b 246 14 213 -13 230 0 b 347 144 288 52 315 99 b 526 471 420 246 488 350 b 556 671 546 537 556 603 b 543 798 556 713 553 756 b 504 837 537 822 521 828 b 490 841 500 840 494 841 b 472 832 482 841 477 838 b 406 678 436 785 406 737 b 410 638 406 665 408 652 b 425 511 419 595 425 553 b 315 186 425 395 387 287 b 180 -14 271 122 228 58 z m 14 24 b 49 39 29 24 40 32 b 120 114 76 60 99 85 b 216 276 156 166 184 223 b 317 626 281 384 317 501 b 315 664 317 639 317 651 b 301 773 314 701 311 737 b 262 808 295 795 278 808 b 245 799 256 808 249 805 b 170 641 209 750 170 706 b 171 621 170 634 170 628 b 177 511 176 585 177 549 b 114 229 177 415 160 320 b 0 26 79 161 42 95 b 14 24 6 24 10 24 z'\n },\n 'restMaxima': {\n 'x_min': 0,\n 'x_max': 366,\n 'y_min': -255,\n 'y_max': 255,\n 'ha': 510,\n 'o': 'm 397 -367 b 504 -343 436 -367 468 -347 b 518 -318 516 -341 518 -330 b 527 -30 518 -217 527 -117 b 526 33 527 -7 527 13 l 526 301 b 501 350 526 323 520 341 b 428 367 477 361 452 367 b 374 359 410 367 393 364 b 357 333 361 354 357 347 b 356 91 357 252 356 171 l 356 30 b 340 -307 357 -82 346 -194 b 397 -367 337 -354 350 -367 z m 46 -357 b 58 -356 49 -357 53 -357 b 154 -333 91 -351 121 -338 b 173 -305 168 -330 173 -320 l 173 302 b 132 356 173 330 157 348 b 68 364 112 363 89 364 b 3 304 19 363 1 348 l 3 4 l 0 4 b 1 -302 0 -98 0 -200 b 46 -357 1 -331 16 -357 z'\n },\n 'restDoubleWhole': {\n 'x_min': 0,\n 'x_max': 122,\n 'y_min': 0,\n 'y_max': 249,\n 'ha': 249,\n 'o': 'm 43 0 b 58 1 48 0 52 0 b 124 20 81 6 102 17 b 176 96 173 27 176 58 b 173 220 174 138 173 179 b 176 304 173 248 176 276 b 140 353 176 331 163 346 b 95 359 125 356 111 359 b 32 346 73 359 52 354 b 0 315 20 340 0 337 b 1 243 0 291 1 268 l 1 174 l 4 174 l 4 48 b 43 0 4 16 17 0 z'\n },\n 'restWhole': {\n 'x_min': 0.8908513171538642,\n 'x_max': 500,\n 'y_min': -120,\n 'y_max': 14,\n 'ha': 134,\n 'o': 'm 76 -173 l 356 -173 l 356 -171 l 642 -171 b 719 -115 680 -171 717 -145 b 720 -82 719 -104 720 -92 b 711 -20 720 -60 719 -40 b 672 17 704 0 694 10 b 649 20 664 20 657 20 b 605 17 634 20 621 17 b 92 19 433 17 262 17 b 29 7 69 20 49 12 b 9 -17 12 4 9 -6 b 10 -43 9 -26 10 -35 b 1 -84 10 -58 3 -72 b 76 -173 0 -147 7 -173 z'\n },\n 'restHalf': {\n 'x_min': 0,\n 'x_max': 518.3998530468286,\n 'y_min': 0,\n 'y_max': 162,\n 'ha': 162,\n 'o': 'm 98 0 l 446 0 l 556 0 b 665 1 592 0 629 0 b 746 82 720 3 743 29 b 736 174 749 114 740 144 b 670 232 729 215 708 232 b 570 229 636 232 603 229 b 356 233 498 229 426 233 l 73 233 b 0 179 19 233 0 220 b 1 154 0 171 0 164 b 6 95 4 135 6 115 b 98 0 3 27 29 0 z'\n },\n 'restQuarter': {\n 'x_min': -0.3784452492533808,\n 'x_max': 263,\n 'y_min': -415,\n 'y_max': 415,\n 'ha': 830,\n 'o': 'm 151 -596 b 164 -563 163 -589 161 -575 b 160 -546 164 -557 161 -552 b 124 -396 148 -495 135 -446 b 122 -380 122 -390 122 -384 b 199 -255 122 -331 158 -272 b 228 -256 209 -249 217 -253 b 324 -346 274 -271 298 -310 b 353 -369 331 -356 341 -369 b 360 -367 356 -369 357 -369 b 379 -336 373 -361 379 -348 l 377 -325 b 344 -232 372 -292 366 -258 b 249 -58 301 -180 278 -117 b 242 -36 245 -49 242 -42 b 258 -7 242 -26 248 -17 b 328 78 284 20 311 45 b 354 158 344 104 354 131 b 337 216 354 177 350 196 b 213 435 294 288 249 359 b 115 575 189 487 158 536 b 78 598 105 585 92 598 b 59 592 72 598 66 596 b 39 562 45 583 39 572 b 53 527 39 550 45 539 b 168 344 98 469 125 402 b 187 307 181 328 187 317 b 153 269 187 294 176 284 b 62 213 122 252 91 235 b 40 180 48 203 40 192 b 46 158 40 173 43 166 b 99 65 60 125 79 95 b 183 -79 131 20 160 -29 b 156 -86 173 -88 164 -85 b 0 -261 58 -99 -7 -173 b 96 -557 10 -366 49 -464 b 124 -585 102 -569 109 -580 b 145 -598 132 -588 138 -598 b 151 -596 147 -598 150 -598 z'\n },\n 'rest8th': {\n 'x_min': 0,\n 'x_max': 289,\n 'y_min': -260,\n 'y_max': 261,\n 'ha': 521,\n 'o': 'm 164 -374 b 212 -340 190 -373 203 -357 b 276 -190 238 -292 258 -242 b 410 285 333 -36 359 128 b 416 314 413 294 416 304 l 416 321 b 393 354 415 341 410 354 b 382 353 389 354 386 354 b 292 311 347 347 315 333 b 174 225 256 276 216 251 b 157 219 168 222 163 219 b 140 228 151 219 145 222 b 131 246 134 233 131 240 b 135 262 131 252 132 256 b 147 298 141 272 147 285 b 127 367 147 323 154 354 b 94 376 114 373 102 376 b 48 336 75 376 63 363 b 3 181 20 288 12 235 b 0 150 1 170 0 160 b 109 24 0 84 35 24 b 171 36 127 24 148 27 b 289 101 213 52 248 75 b 164 -374 256 -62 193 -213 z'\n },\n 'rest16th': {\n 'x_min': 0,\n 'x_max': 333,\n 'y_min': -328.283950617284,\n 'y_max': 244,\n 'ha': 572.2839506172841,\n 'o': 'm 209 -471 b 246 -458 222 -477 236 -468 b 307 -338 279 -425 300 -384 b 324 -226 312 -301 317 -262 b 428 161 350 -94 386 35 b 480 318 445 215 480 259 b 467 347 480 331 477 341 b 445 351 461 350 454 351 b 408 337 432 351 419 347 b 402 333 405 336 403 334 b 223 215 344 294 294 245 b 236 259 229 233 235 246 b 238 276 238 265 238 271 b 212 338 238 302 226 334 b 193 341 206 340 199 341 b 86 289 156 341 104 317 b 59 180 66 255 59 217 b 156 27 59 76 92 27 b 236 46 179 27 204 35 b 338 101 271 59 298 82 b 289 -49 312 49 302 0 b 196 -122 276 -99 235 -107 b 176 -114 187 -127 176 -127 l 176 -111 b 157 -53 177 -88 164 -72 b 69 -9 141 -7 101 -16 b 17 -48 43 -3 29 -27 b 0 -127 4 -73 0 -99 b 6 -186 0 -147 1 -167 b 82 -294 17 -262 37 -294 b 160 -276 102 -294 128 -289 b 219 -242 181 -268 203 -259 b 236 -230 223 -236 229 -230 b 243 -232 239 -230 240 -230 b 235 -275 248 -246 239 -261 b 202 -456 220 -334 202 -395 b 209 -471 202 -462 203 -468 z'\n },\n 'rest32nd': {\n 'x_min': 0,\n 'x_max': 347,\n 'y_min': -497.5023916875033,\n 'y_max': 483,\n 'ha': 980.5023916875033,\n 'o': 'm 177 -716 b 217 -690 194 -720 209 -704 b 233 -655 225 -680 230 -668 b 292 -390 253 -567 275 -480 b 361 -48 312 -275 336 -161 b 452 400 393 102 422 252 b 497 629 467 477 482 553 b 500 647 498 635 500 641 b 480 691 500 665 492 684 b 464 696 475 694 469 696 b 418 674 448 696 431 685 l 361 626 b 333 611 353 618 343 612 b 308 629 325 611 317 616 b 239 667 292 651 265 661 b 204 670 228 668 216 670 b 86 559 141 670 95 628 b 85 537 86 552 85 544 b 107 416 85 495 95 455 b 161 372 114 389 134 372 b 174 373 166 372 170 372 b 226 383 192 374 209 377 b 387 478 285 402 330 444 b 364 386 379 444 364 415 b 276 271 364 323 320 298 b 265 266 272 268 268 266 b 252 276 261 266 256 269 b 143 333 229 311 186 333 b 107 327 130 333 118 330 b 43 243 62 314 46 291 b 58 145 43 210 52 179 b 150 63 68 92 99 63 b 315 132 213 63 259 98 b 266 -58 297 63 281 4 b 207 -101 259 -91 230 -96 b 186 -66 186 -107 199 -75 b 180 -50 181 -63 183 -55 b 101 -3 160 -23 135 -3 b 9 -66 59 -3 20 -32 b 0 -118 3 -84 0 -101 b 10 -196 0 -144 6 -170 b 104 -287 20 -256 52 -287 b 137 -282 114 -287 125 -287 b 184 -269 151 -281 171 -269 b 196 -275 190 -269 193 -271 b 199 -287 197 -278 199 -282 b 184 -343 199 -304 189 -325 b 181 -348 184 -346 183 -347 b 134 -595 158 -429 131 -508 b 156 -677 134 -624 150 -648 b 177 -716 158 -693 160 -713 z'\n },\n 'rest64th': {\n 'x_min': 0,\n 'x_max': 428,\n 'y_min': -720,\n 'y_max': 473.6797408388932,\n 'ha': 1193.6797408388932,\n 'o': 'm 200 -1037 b 229 -1012 215 -1037 222 -1025 b 238 -984 233 -1004 236 -994 b 282 -780 248 -914 265 -848 b 386 -369 317 -644 354 -507 b 491 104 422 -212 451 -53 b 600 541 528 249 550 399 b 616 629 611 570 616 599 b 600 680 616 648 615 671 b 550 665 586 687 566 677 b 480 618 527 649 501 635 b 464 611 474 613 468 611 b 448 622 458 611 454 615 b 366 662 425 651 397 662 b 331 658 354 662 343 661 b 242 572 285 647 253 619 b 236 528 239 557 236 543 b 266 400 236 484 251 442 b 325 373 274 377 301 373 b 436 409 366 373 403 383 l 494 452 b 474 360 485 416 474 389 b 383 248 474 297 435 269 b 320 328 377 288 351 310 b 276 341 305 337 291 341 b 186 269 235 341 194 311 b 181 230 183 256 181 243 b 187 153 181 204 186 179 b 279 63 192 86 233 63 b 304 65 288 63 295 63 b 416 115 344 72 379 92 b 387 -14 406 69 397 27 b 320 -95 380 -52 369 -86 b 318 -79 320 -89 320 -84 b 223 0 305 -29 271 0 b 122 -81 171 0 135 -30 b 118 -127 120 -96 118 -112 b 118 -196 118 -150 118 -173 b 137 -242 118 -215 125 -229 b 209 -275 157 -266 181 -275 b 249 -269 222 -275 235 -274 b 318 -248 272 -264 294 -255 b 281 -390 315 -301 292 -344 b 276 -400 279 -393 279 -397 b 259 -420 272 -408 266 -416 b 246 -429 255 -425 251 -429 b 233 -415 242 -429 238 -426 b 176 -359 225 -389 200 -372 b 121 -346 158 -348 140 -346 b 14 -408 73 -346 27 -370 b 0 -498 4 -438 0 -468 b 6 -564 0 -520 3 -543 b 91 -635 12 -611 45 -635 b 131 -629 104 -635 117 -634 b 223 -590 163 -622 190 -603 b 166 -824 203 -671 189 -747 b 148 -912 157 -852 148 -881 b 156 -955 148 -926 150 -940 b 177 -1008 161 -972 170 -991 b 200 -1037 181 -1020 183 -1037 z'\n },\n 'rest128th': {\n 'x_min': 0.6717818579024267,\n 'x_max': 491,\n 'y_min': -711,\n 'y_max': 719,\n 'ha': 1430,\n 'o': 'm 233 -1015 b 271 -956 256 -1002 266 -981 l 314 -723 b 393 -350 337 -598 366 -474 b 543 312 442 -128 492 91 b 687 841 583 490 635 665 b 707 958 698 880 707 919 b 706 986 707 968 707 976 b 688 1025 704 999 704 1024 b 670 1027 683 1025 677 1027 b 629 1007 655 1027 639 1022 b 559 945 613 981 586 968 b 541 1004 553 968 559 991 b 456 1035 516 1024 488 1035 b 419 1030 444 1035 431 1034 b 344 953 379 1018 353 995 b 340 900 341 936 340 917 b 341 847 340 881 341 864 b 380 779 340 815 354 793 b 464 763 406 765 435 762 b 592 814 510 763 549 786 b 546 660 575 757 556 710 b 480 585 537 619 517 598 b 478 599 480 590 478 595 b 386 678 472 641 428 678 b 294 612 343 678 304 651 b 279 477 282 567 278 521 b 363 395 281 428 317 395 b 380 396 369 395 374 395 b 488 436 416 403 449 419 b 384 233 469 357 468 275 b 359 291 373 252 377 276 b 282 318 337 310 310 318 b 181 264 243 318 203 298 b 154 107 153 216 154 161 b 242 6 154 42 187 6 b 278 10 253 6 265 7 b 408 88 330 22 366 55 b 387 -1 400 56 393 27 b 301 -112 379 -55 354 -94 b 289 -65 297 -95 302 -79 b 219 -32 269 -42 245 -32 b 183 -37 207 -32 196 -35 b 112 -109 144 -46 121 -71 b 105 -219 104 -145 108 -183 b 186 -315 101 -276 134 -315 b 230 -307 199 -315 215 -312 b 324 -256 264 -295 292 -275 b 180 -491 323 -383 266 -471 b 183 -459 180 -480 180 -469 b 184 -442 184 -454 184 -448 b 184 -436 184 -441 184 -438 b 135 -369 184 -403 170 -383 b 102 -363 125 -364 114 -363 b 29 -399 73 -363 45 -376 b 1 -556 -4 -448 6 -503 b 109 -670 -4 -625 43 -670 b 140 -667 118 -670 130 -668 b 253 -616 180 -658 213 -638 b 238 -688 248 -644 242 -665 b 192 -959 220 -779 192 -867 b 193 -992 192 -971 192 -981 b 210 -1024 194 -1014 199 -1024 b 233 -1015 216 -1024 223 -1021 z'\n },\n 'dynamicPiano': {\n 'x_min': -49,\n 'x_max': 326.5019318364244,\n 'y_min': -142,\n 'y_max': 515,\n 'ha': 657,\n 'o': 'm -56 -204 b -42 -202 -52 -204 -46 -203 b -19 -194 -35 -202 -26 -197 b 147 -138 35 -170 91 -151 b 249 -58 194 -127 223 -95 b 262 -29 255 -50 262 -39 b 258 -17 262 -24 261 -20 b 232 -7 252 -10 242 -7 b 210 -12 225 -7 217 -9 b 125 -40 184 -23 157 -30 b 183 140 153 19 171 79 b 251 167 207 144 230 153 b 469 518 383 262 480 382 b 357 687 472 626 420 687 b 315 678 344 687 330 684 b 204 600 279 664 240 634 b 210 704 206 635 209 670 b 215 721 212 710 215 716 b 206 733 215 727 212 730 b 180 742 197 736 189 742 b 164 734 176 742 170 740 b 1 575 108 684 36 645 b -7 557 -1 569 -7 563 b -6 553 -7 556 -7 554 b 7 547 -3 547 3 547 l 17 547 b 82 575 43 547 59 567 l 82 452 b 56 46 82 317 81 180 b 17 -66 49 7 46 -36 b -62 -173 -13 -99 -37 -135 b -71 -192 -66 -179 -71 -184 b -68 -199 -71 -193 -69 -196 b -56 -204 -65 -203 -60 -204 z m 196 258 b 197 266 197 261 197 264 b 200 510 200 347 199 429 b 233 543 210 521 222 533 b 281 560 249 554 266 560 b 340 503 310 560 333 540 b 344 461 343 488 344 474 b 321 323 344 413 333 369 b 268 272 315 300 295 281 b 196 258 245 265 220 261 z'\n },\n 'dynamicMezzo': {\n 'x_min': -18,\n 'x_max': 559,\n 'y_min': -50,\n 'y_max': 365,\n 'ha': 415,\n 'o': 'm 43 -71 b 160 19 86 -71 143 -26 b 230 264 189 99 200 184 b 282 363 243 297 259 327 b 287 320 285 347 287 333 b 284 279 287 305 285 292 l 249 -12 b 275 -43 248 -29 245 -43 b 395 45 321 -43 389 3 b 462 271 406 124 436 197 b 523 387 475 310 490 348 l 523 346 b 504 130 521 274 513 202 b 501 81 501 114 501 98 b 510 3 501 55 504 29 b 580 -72 521 -48 543 -72 b 625 -63 593 -72 608 -69 b 789 50 690 -43 744 -3 b 805 72 795 56 805 63 b 798 85 805 76 802 81 b 778 94 792 91 785 94 b 755 85 770 94 763 91 l 693 40 b 675 33 685 36 680 33 b 658 52 668 33 662 39 b 645 144 651 82 645 112 b 658 448 641 246 660 346 b 606 507 658 485 638 507 b 583 504 599 507 592 505 b 495 446 547 497 521 471 b 420 373 471 423 448 399 b 413 458 418 406 418 432 b 361 507 408 490 386 507 b 320 491 347 507 333 501 b 160 307 256 444 207 382 l 160 337 b 174 488 160 387 174 438 b 156 521 174 501 173 513 b 137 526 148 524 143 526 b 109 513 127 526 118 520 b -16 399 66 477 23 439 b -26 383 -20 395 -26 389 b -26 379 -26 382 -26 380 b -14 370 -24 372 -20 370 b -6 372 -12 370 -9 372 b 19 376 4 374 12 376 b 36 359 32 376 36 370 b 30 330 36 350 35 341 l 30 323 b 9 -35 23 203 17 85 b 43 -71 6 -65 19 -71 z'\n },\n 'dynamicForte': {\n 'x_min': -144,\n 'x_max': 311.30112136775,\n 'y_min': -115.3876295915697,\n 'y_max': 504,\n 'ha': 619.3876295915697,\n 'o': 'm -101 -166 b 173 76 7 -153 150 -30 b 206 344 192 164 202 253 b 268 338 226 343 246 341 b 384 395 317 333 353 361 b 397 419 393 405 397 412 b 367 442 397 429 387 436 b 350 444 361 444 356 444 b 206 455 302 449 255 454 l 206 474 b 202 540 204 495 202 518 b 209 593 202 557 203 576 b 236 624 215 613 225 624 b 265 612 245 624 253 619 b 308 552 287 596 302 577 b 336 533 312 534 323 533 b 448 611 366 533 444 583 b 399 696 452 648 423 671 b 382 706 395 700 387 703 b 308 726 357 720 333 726 b 207 684 272 726 239 711 b 60 455 135 622 60 560 l 10 455 b -23 448 -1 455 -13 454 b -102 372 -55 426 -76 397 b -109 357 -108 367 -109 361 b -95 347 -109 353 -105 348 b -63 346 -84 346 -73 346 b 0 344 -43 344 -22 344 b 63 344 22 344 43 344 b 53 186 63 291 59 239 b 23 0 46 124 42 60 b -35 -60 10 -42 -6 -60 b -73 -52 -45 -60 -58 -58 b -91 -48 -79 -49 -85 -48 b -109 -53 -96 -48 -102 -49 b -199 -124 -143 -72 -168 -99 b -207 -137 -203 -128 -207 -132 b -194 -148 -207 -141 -203 -145 b -101 -166 -164 -160 -132 -168 z'\n },\n 'dynamicRinforzando': {\n 'x_min': -75,\n 'x_max': 322.0960720195126,\n 'y_min': -90,\n 'y_max': 325,\n 'ha': 415,\n 'o': 'm 23 -130 b 40 -125 27 -130 33 -128 b 128 -9 81 -114 125 -53 b 145 200 132 62 141 130 b 148 238 147 212 148 225 b 308 321 184 291 245 321 b 363 314 325 321 344 318 b 377 310 369 312 373 310 b 384 311 380 310 382 310 b 464 415 410 317 464 389 b 446 433 465 429 455 429 b 390 445 428 441 409 445 b 305 429 361 445 334 438 b 167 346 252 413 202 393 b 153 325 163 338 158 333 b 148 438 154 363 151 399 b 121 468 147 456 134 468 b 101 458 115 468 108 465 b -63 310 46 409 -16 367 b -108 240 -78 289 -98 271 b 32 330 -50 256 -13 297 b 37 304 37 320 37 312 l 37 292 b 10 -101 27 161 20 30 b 23 -130 9 -120 12 -130 z'\n },\n 'dynamicSforzando': {\n 'x_min': 0,\n 'x_max': 296,\n 'y_min': 0,\n 'y_max': 379,\n 'ha': 379,\n 'o': 'm 151 0 b 174 1 160 0 166 0 b 392 158 272 14 346 71 b 405 207 400 174 405 190 b 359 287 405 236 389 265 b 261 325 328 308 294 315 b 168 413 216 340 181 366 b 166 426 167 418 166 423 b 176 438 166 432 167 436 b 199 441 183 441 190 441 b 310 393 238 441 295 422 b 334 370 317 376 325 370 b 363 386 343 370 353 379 b 422 445 386 402 408 420 b 426 458 425 449 426 454 b 422 469 426 462 425 465 b 274 546 395 518 333 546 b 161 503 232 546 190 531 b 86 405 132 472 108 439 b 71 347 75 387 71 367 b 112 256 71 312 85 279 b 209 215 141 232 176 226 b 284 168 238 206 266 197 b 300 131 291 157 300 144 b 298 120 300 127 298 122 b 278 107 294 109 285 108 b 262 108 271 107 266 108 l 259 108 b 114 157 200 107 156 125 b 96 181 104 163 96 170 l 96 184 b 102 202 96 190 102 196 b 96 209 102 204 101 207 b 63 194 82 215 72 204 b 7 109 42 168 26 138 b 0 86 3 101 0 94 b 13 60 0 78 4 68 b 151 0 53 23 101 0 z'\n },\n 'dynamicZ': {\n 'x_min': -42.73880183193087,\n 'x_max': 331,\n 'y_min': 0,\n 'y_max': 328,\n 'ha': 328,\n 'o': 'm -45 0 b -6 16 -32 0 -17 10 b 3 20 -3 16 0 19 b 144 60 49 48 96 60 b 284 22 190 60 238 46 b 348 4 305 10 327 4 b 461 75 393 4 435 30 b 468 91 464 81 467 86 b 456 104 468 95 465 99 b 287 173 402 131 348 167 b 239 176 271 174 255 176 b 168 174 217 176 194 174 b 367 340 236 236 298 294 b 459 423 402 363 432 392 b 477 454 467 431 475 442 b 474 462 477 456 475 459 b 454 472 469 469 462 472 b 432 468 446 472 439 469 b 356 448 406 461 380 455 b 210 422 307 433 258 422 b 109 442 177 422 144 428 b 94 445 104 444 99 445 b 69 433 85 445 76 442 b 27 390 56 419 39 406 b -9 343 16 373 -17 357 b 63 311 3 320 36 314 l 78 311 b 132 307 95 308 114 307 b 240 314 168 307 203 311 l 193 271 b -37 50 117 196 19 145 b -59 7 -46 36 -69 20 b -45 0 -55 3 -50 0 z'\n },\n 'ornamentTrill': {\n 'x_min': 1,\n 'x_max': 551,\n 'y_min': -18,\n 'y_max': 539,\n 'ha': 557,\n 'o': 'm 269 -17 b 343 135 325 19 346 66 b 343 158 343 147 344 147 b 323 192 341 171 337 187 b 291 176 311 194 300 184 b 264 148 282 167 274 158 b 229 131 261 145 238 131 b 212 170 209 131 213 154 b 194 438 203 259 199 348 l 272 442 b 284 452 276 441 279 441 b 305 462 287 461 295 462 b 312 462 307 462 310 462 b 346 477 325 462 340 464 b 366 560 357 503 366 531 b 321 612 366 598 356 618 b 190 602 278 605 235 605 l 190 638 b 187 693 190 652 190 667 b 161 776 184 717 193 776 b 137 747 150 776 137 766 b 130 654 135 716 131 685 l 130 596 l 52 588 b 4 539 23 585 7 570 b 1 477 3 530 1 500 b 3 448 1 461 3 448 b 3 461 3 448 3 452 b 53 432 0 438 19 432 b 134 435 75 432 102 433 b 151 117 138 328 147 223 b 170 13 153 82 157 46 b 209 -26 179 -10 193 -26 b 222 -22 213 -26 217 -24 b 269 -17 233 -16 253 -27 z m 549 66 b 577 99 563 66 572 84 b 580 131 580 109 580 121 l 580 302 b 600 347 580 318 582 337 b 701 392 632 364 665 384 b 793 518 785 409 793 435 b 759 588 793 559 785 576 b 711 560 749 592 733 570 b 588 500 671 541 631 521 b 583 533 586 514 586 524 b 560 576 577 549 577 572 b 517 550 541 582 528 564 b 416 423 482 508 452 462 b 382 353 392 397 384 370 b 387 305 380 341 386 318 b 392 275 389 295 392 285 b 409 243 393 262 393 243 b 431 262 419 243 425 255 b 521 373 459 298 488 333 b 523 354 521 366 523 360 b 520 337 523 346 521 340 b 508 295 513 323 508 310 b 530 102 508 279 524 122 b 549 66 533 88 530 66 z'\n },\n 'ornamentTurn': {\n 'x_min': 0,\n 'x_max': 574,\n 'y_min': 0,\n 'y_max': 312,\n 'ha': 312,\n 'o': 'm 651 0 b 816 132 727 0 796 46 b 827 223 822 163 827 193 b 808 340 827 262 821 301 b 665 449 785 408 729 449 b 636 446 655 449 647 448 b 589 384 600 441 586 422 l 602 300 b 611 285 603 291 605 285 b 621 288 613 285 616 287 b 655 295 632 294 644 295 b 711 284 674 295 693 289 b 773 209 740 275 773 232 b 697 156 773 184 734 160 b 664 154 685 154 675 154 b 579 168 635 154 608 158 b 455 242 533 186 495 213 b 261 400 387 291 331 354 b 160 432 225 422 190 432 b 20 328 98 432 49 392 b 0 229 6 295 0 262 b 30 71 0 176 14 122 b 144 3 43 29 96 3 b 168 6 153 3 160 4 b 248 122 233 20 248 39 b 246 147 248 124 248 135 b 226 177 243 164 239 177 b 206 170 220 177 215 174 b 144 154 186 158 166 154 b 79 170 122 154 101 160 b 53 202 62 179 53 189 b 60 228 53 209 55 217 b 161 281 81 261 120 281 b 183 279 168 281 176 281 b 325 190 243 269 284 229 b 572 16 402 124 475 53 b 651 0 598 6 625 0 z'\n },\n 'ornamentTurnSlash': {\n 'x_min': 0,\n 'x_max': 574,\n 'y_min': -106,\n 'y_max': 405,\n 'ha': 511,\n 'o': 'm 441 -153 b 456 -60 455 -118 456 -89 b 455 81 455 -14 455 33 b 572 14 491 55 530 30 b 651 -1 598 4 625 -1 b 816 131 727 -1 796 45 b 827 222 822 161 827 192 b 808 338 827 261 821 300 b 665 448 785 406 729 448 b 636 445 655 448 647 446 b 589 383 600 439 586 420 l 602 298 b 611 284 603 289 605 284 b 621 287 613 284 616 285 b 655 294 632 292 644 294 b 711 282 674 294 693 288 b 773 207 740 274 773 230 b 697 154 773 183 734 158 b 664 153 685 153 675 153 b 579 167 635 153 608 157 b 455 240 533 183 495 212 b 454 242 455 240 455 242 l 454 337 b 452 488 454 386 452 439 b 433 570 452 517 451 546 b 425 583 431 575 431 583 l 422 583 b 403 566 415 582 408 573 b 402 546 400 560 402 553 l 397 287 b 261 399 353 325 310 366 b 160 431 225 420 190 431 b 20 327 98 431 48 390 b 0 228 6 294 0 261 b 30 69 0 174 14 121 b 144 1 43 27 96 1 b 168 4 153 1 160 3 b 248 121 233 19 248 37 b 246 145 248 122 248 134 b 226 176 243 163 239 176 b 206 168 220 176 215 173 b 144 153 186 157 166 153 b 79 168 122 153 101 158 b 53 200 62 177 53 187 b 60 226 53 207 55 216 b 161 279 79 259 120 279 b 183 278 168 279 176 279 b 325 189 243 266 282 226 b 395 130 348 168 372 148 b 393 71 393 109 393 89 b 441 -153 390 -6 402 -78 z'\n },\n 'ornamentMordent': {\n 'x_min': 0,\n 'x_max': 700,\n 'y_min': 0,\n 'y_max': 497,\n 'ha': 497,\n 'o': 'm 513 0 b 528 39 526 14 527 27 b 531 72 531 50 531 60 b 528 138 531 94 528 117 l 528 347 b 552 359 537 354 544 359 b 579 338 560 359 569 353 b 674 217 609 297 639 255 b 719 190 690 200 704 190 b 759 215 732 190 744 197 b 940 395 815 279 877 337 b 1001 490 968 422 986 455 b 1008 513 1004 495 1008 505 b 1002 524 1008 517 1007 521 b 968 516 994 530 978 524 b 960 508 965 513 963 510 b 798 356 900 464 848 410 b 778 341 791 347 783 341 b 757 354 772 341 765 346 b 661 475 720 392 690 432 b 611 517 644 504 629 517 b 563 498 598 517 583 511 b 527 471 550 490 539 481 l 527 570 b 492 716 526 619 523 671 b 472 677 480 704 472 694 b 465 399 474 585 468 491 b 439 366 456 387 448 376 b 384 320 415 336 399 320 b 330 367 369 320 354 336 b 325 376 328 369 327 373 b 226 490 291 413 265 456 b 189 505 213 500 202 505 b 157 491 177 505 167 500 b 0 229 75 420 0 346 b 1 202 0 220 0 212 b 22 215 12 203 16 209 b 124 327 55 252 89 289 b 147 343 132 337 140 343 b 171 323 156 343 164 336 b 266 197 196 276 232 236 b 337 157 291 170 314 157 b 410 207 361 157 386 174 b 461 274 428 229 444 252 b 462 166 461 238 461 202 b 513 0 465 108 487 55 z'\n },\n 'ornamentShortTrill': {\n 'x_min': 0,\n 'x_max': 747,\n 'y_min': 0,\n 'y_max': 243,\n 'ha': 243,\n 'o': 'm 379 0 b 428 14 395 0 410 4 b 474 56 445 26 461 39 b 552 157 500 89 526 122 b 566 168 556 163 560 168 b 575 157 569 168 572 166 b 664 36 592 107 628 72 b 733 1 685 13 710 1 b 802 35 757 1 780 13 b 1007 249 871 105 940 177 b 1067 324 1028 272 1054 295 b 1076 340 1068 330 1076 334 b 1073 346 1076 341 1076 343 b 1057 350 1068 348 1063 350 b 1047 347 1053 350 1050 350 b 1001 310 1031 336 1015 324 l 857 157 b 844 143 852 153 848 143 b 835 150 841 143 838 144 b 757 242 815 186 780 209 b 685 298 739 268 713 284 b 641 310 670 305 655 310 b 590 288 625 310 608 304 b 497 179 554 256 527 215 b 480 164 490 170 485 164 b 462 179 474 164 469 168 b 372 295 436 220 405 258 b 278 344 346 324 312 344 b 199 310 252 344 226 334 b 92 196 161 274 128 233 b 0 24 46 148 23 89 b 42 48 22 27 32 37 b 156 168 84 85 114 132 b 196 192 174 184 186 192 b 228 158 206 192 215 181 b 312 36 252 114 282 75 b 379 0 331 12 354 0 z'\n },\n 'ornamentTremblement': {\n 'x_min': 0,\n 'x_max': 982.17691453624,\n 'y_min': 0,\n 'y_max': 224,\n 'ha': 224,\n 'o': 'm 0 0 b 63 36 30 12 48 23 b 157 124 94 66 125 94 b 177 135 164 131 170 135 b 196 122 183 135 189 131 b 268 40 217 94 245 68 b 323 6 288 16 304 6 b 369 20 336 6 350 10 b 412 53 384 29 399 40 b 501 145 442 84 472 114 b 523 158 508 154 516 158 b 543 145 528 158 536 154 b 641 45 576 112 608 78 b 698 17 658 27 677 17 b 729 23 708 17 719 20 b 804 65 756 32 780 46 b 904 154 837 95 871 124 b 920 163 910 160 916 163 b 936 153 924 163 930 160 b 1024 60 965 121 996 92 b 1112 13 1053 29 1080 13 b 1184 39 1135 13 1158 22 b 1359 194 1248 84 1305 138 b 1413 301 1388 223 1403 261 b 1404 323 1417 315 1413 323 b 1391 320 1400 323 1395 321 b 1344 294 1375 314 1358 307 b 1224 186 1305 258 1269 216 b 1194 173 1212 179 1202 173 b 1165 193 1184 173 1175 179 b 1096 271 1145 222 1122 248 b 1001 318 1061 302 1031 318 b 903 268 969 318 937 301 b 806 186 871 239 841 210 b 782 174 796 179 789 174 b 756 193 773 174 765 180 b 652 291 729 232 693 266 b 596 308 634 302 615 308 b 530 278 573 308 552 298 l 415 168 b 393 157 408 161 400 157 b 373 171 387 157 380 161 b 305 245 353 197 330 222 b 248 276 285 266 266 278 b 189 245 229 276 210 266 b 81 144 156 209 120 174 b 0 0 33 109 26 56 z'\n },\n 'ornamentPrecompAppoggTrill': {\n 'x_min': -0.11067192132025548,\n 'x_max': 1066,\n 'y_min': -50,\n 'y_max': 533.1706452421108,\n 'ha': 583.1706452421108,\n 'o': 'm 187 -46 b 213 -14 197 -37 204 -26 b 285 151 251 36 266 94 b 304 189 294 177 297 189 b 337 168 311 189 320 181 b 458 33 386 131 415 76 b 495 12 472 19 484 12 b 531 40 508 12 518 22 b 580 168 557 79 569 124 b 622 235 592 213 603 235 b 683 194 636 235 655 222 b 838 26 737 140 791 86 b 919 -33 860 -1 881 -39 b 984 53 960 -27 971 19 b 1022 156 998 86 1008 122 b 1054 190 1032 179 1041 190 b 1089 167 1063 190 1074 183 b 1208 32 1129 122 1171 78 b 1244 10 1221 17 1231 10 b 1273 22 1253 10 1263 14 b 1496 206 1352 78 1427 137 b 1535 310 1526 236 1535 272 b 1531 359 1535 325 1534 343 b 1496 343 1515 360 1506 351 l 1309 192 b 1269 167 1289 176 1279 167 b 1234 199 1260 167 1251 177 b 1122 324 1200 243 1168 289 b 1074 344 1106 337 1089 344 b 1014 301 1051 344 1030 328 b 952 144 985 252 971 197 b 933 121 946 128 940 121 b 910 137 927 121 920 125 b 850 210 888 161 870 186 b 687 369 799 266 750 325 b 631 390 665 383 647 390 b 567 327 602 390 580 369 b 527 199 554 284 543 242 b 508 168 520 179 514 168 b 482 192 503 168 495 177 b 353 328 444 240 405 292 b 312 343 338 338 324 343 b 266 297 292 343 276 327 b 204 125 248 239 232 180 b 143 79 193 102 173 79 b 92 122 117 79 105 102 b 81 154 86 131 84 143 b 48 423 59 242 50 333 b 45 544 46 464 45 504 b 53 730 45 606 48 668 b 40 768 55 744 52 766 b 13 730 19 770 14 747 b 0 514 7 658 -1 586 b 26 122 3 383 6 252 b 75 -36 35 66 40 10 b 134 -72 92 -59 112 -72 b 187 -46 151 -72 170 -63 z'\n },\n 'ornamentPrecompSlideTrillDAnglebert': {\n 'x_min': 0,\n 'x_max': 1088,\n 'y_min': -380,\n 'y_max': 252,\n 'ha': 632,\n 'o': 'm 560 -539 b 439 -481 527 -497 484 -485 b 354 -461 409 -478 380 -477 b 131 -154 236 -389 161 -285 b 124 -98 127 -135 124 -117 b 196 55 124 -40 148 10 b 308 99 230 86 268 99 b 399 81 337 99 367 92 b 514 22 441 66 477 43 b 619 -30 567 -9 590 -30 b 719 17 642 -30 670 -16 b 861 131 769 52 818 88 b 899 150 874 144 887 150 b 936 117 913 150 926 138 b 965 43 948 94 956 68 b 1007 -1 973 24 978 -1 b 1048 30 1025 -1 1037 16 b 1070 65 1057 40 1064 52 b 1110 148 1084 92 1096 121 b 1145 190 1120 164 1120 190 b 1191 153 1169 192 1179 168 b 1256 29 1218 115 1231 68 b 1292 1 1267 10 1277 1 b 1320 10 1300 1 1309 4 b 1369 48 1339 19 1355 33 b 1515 196 1418 96 1464 148 b 1567 343 1558 238 1567 287 b 1555 363 1565 357 1562 363 b 1539 356 1551 363 1547 360 b 1433 268 1502 330 1466 301 b 1335 171 1401 236 1374 199 b 1310 163 1325 166 1318 163 b 1286 183 1302 163 1293 168 b 1218 311 1264 226 1247 272 b 1164 351 1200 337 1182 351 b 1110 308 1146 351 1128 337 b 1031 176 1084 265 1058 219 b 1015 161 1025 166 1021 161 b 999 179 1009 161 1005 167 b 955 279 985 213 973 248 b 913 307 943 300 930 307 b 887 302 904 307 896 305 b 852 281 874 298 863 291 b 693 167 804 236 747 204 b 612 140 667 150 639 140 b 549 157 592 140 570 145 b 403 220 503 181 452 202 b 271 248 360 236 315 248 b 179 229 239 248 209 242 b 0 -29 65 180 0 85 b 9 -104 0 -53 3 -78 b 397 -526 56 -317 183 -464 b 505 -547 432 -536 468 -547 b 560 -539 524 -547 541 -544 z'\n },\n 'ornamentPrecompSlideTrillBach': {\n 'x_min': 0,\n 'x_max': 1185,\n 'y_min': -380,\n 'y_max': 465,\n 'ha': 845,\n 'o': 'm 624 -544 b 642 -528 638 -543 642 -537 b 639 -514 642 -524 642 -520 b 590 -444 629 -487 609 -467 b 523 -413 573 -422 553 -410 b 498 -415 514 -415 507 -415 b 399 -389 464 -415 431 -405 b 89 -157 281 -330 176 -255 b 72 -117 78 -144 72 -131 b 73 -101 72 -111 72 -107 b 187 186 91 3 147 91 b 246 230 200 216 222 230 b 300 209 262 230 281 223 b 456 48 359 163 403 101 b 540 -10 494 10 518 -10 b 625 59 566 -10 589 13 b 690 148 648 88 668 118 b 711 167 697 160 704 167 b 733 153 719 167 724 163 b 844 14 769 105 808 60 b 903 -42 873 -23 886 -42 b 973 -1 919 -42 937 -27 b 1008 33 986 7 996 20 b 1048 81 1021 48 1035 65 b 1050 37 1048 66 1050 52 b 1047 -24 1050 17 1048 -3 b 1038 -275 1038 -108 1040 -192 l 1037 -289 b 1045 -302 1037 -295 1038 -301 b 1068 -284 1056 -304 1064 -292 b 1084 -242 1076 -271 1081 -256 b 1099 -109 1096 -199 1099 -154 b 1106 158 1099 -19 1106 71 b 1128 187 1113 167 1120 177 b 1168 223 1143 212 1155 223 b 1210 193 1179 223 1191 213 b 1220 183 1214 190 1215 186 b 1329 36 1261 138 1292 84 b 1374 7 1345 16 1358 7 b 1411 20 1384 7 1395 12 b 1479 84 1437 37 1459 59 b 1610 235 1521 135 1564 186 b 1706 403 1655 282 1695 334 b 1614 346 1663 400 1637 373 b 1464 170 1564 287 1515 228 b 1440 150 1453 156 1447 150 b 1414 173 1433 150 1426 158 b 1283 336 1371 228 1333 288 b 1220 366 1261 356 1240 366 b 1148 318 1194 366 1169 350 b 1103 255 1133 297 1119 275 b 1097 301 1102 271 1100 285 b 1099 334 1099 312 1099 324 b 1092 428 1099 367 1094 397 b 1071 647 1087 501 1079 575 b 1058 670 1071 657 1071 670 b 1035 648 1047 670 1038 661 b 1018 516 1024 605 1015 560 b 1041 203 1025 412 1037 307 b 1043 180 1041 196 1043 187 b 992 127 1027 161 1009 143 b 965 111 981 117 972 111 b 936 132 955 111 946 120 b 829 268 900 179 867 225 b 760 317 801 301 780 317 b 691 258 739 317 719 297 b 605 147 664 219 641 177 b 589 138 599 141 593 138 b 572 148 583 138 579 141 b 415 317 520 206 467 261 b 327 372 390 343 366 366 b 300 373 317 373 308 373 b 154 295 239 373 190 348 b 55 138 120 243 85 192 b 0 -53 22 79 0 13 b 160 -317 0 -156 49 -252 b 209 -354 177 -327 192 -343 b 510 -531 305 -419 397 -495 b 593 -547 537 -540 564 -547 b 624 -544 603 -547 613 -546 z'\n },\n 'ornamentPrecompTrillSuffixDandrieu': {\n 'x_min': 0,\n 'x_max': 1003,\n 'y_min': -20,\n 'y_max': 521,\n 'ha': 541,\n 'o': 'm 791 -16 b 844 33 812 -3 829 14 b 981 271 900 107 937 190 b 994 288 984 278 985 288 b 1009 269 1004 288 1007 278 b 1077 112 1034 217 1051 163 b 1158 43 1103 62 1129 43 b 1231 69 1179 43 1204 55 b 1348 189 1280 98 1315 143 b 1444 451 1407 271 1444 357 b 1431 547 1444 482 1440 514 b 1188 750 1401 665 1299 750 b 1158 747 1178 750 1168 749 b 1079 684 1119 742 1089 727 b 1063 632 1076 665 1071 648 b 1056 609 1058 622 1056 615 b 1071 599 1056 602 1060 599 b 1086 600 1076 599 1080 600 b 1130 605 1102 603 1116 605 b 1244 569 1171 605 1210 595 b 1349 346 1322 511 1349 433 b 1348 312 1349 334 1349 324 b 1289 197 1345 266 1325 228 b 1238 174 1270 181 1253 174 b 1188 215 1220 174 1202 187 b 1145 308 1172 245 1159 276 b 1096 413 1129 343 1120 382 b 1053 438 1084 431 1068 438 b 1011 413 1038 438 1022 431 b 955 324 989 384 971 354 b 850 127 920 258 886 192 b 838 112 847 121 842 112 b 824 128 828 109 825 121 b 802 193 815 150 809 171 b 730 400 779 264 766 337 b 688 431 719 420 703 431 b 647 403 674 431 660 422 b 606 338 632 383 619 361 b 513 167 575 282 546 223 b 480 122 503 150 498 122 b 452 171 459 122 459 153 b 420 255 442 199 432 228 b 337 408 399 308 380 364 b 276 436 317 428 297 436 b 215 397 253 436 230 423 b 23 72 148 289 81 184 b 0 29 17 59 0 40 b 7 17 0 23 1 20 b 59 58 26 7 46 39 b 190 276 111 127 143 206 b 216 301 202 292 207 301 b 245 279 223 301 232 294 b 311 166 278 248 292 206 b 367 16 331 117 346 65 b 402 -19 377 -7 387 -19 b 438 -4 412 -19 423 -13 b 518 88 474 17 495 55 b 628 284 562 150 592 216 b 657 223 648 266 651 243 b 717 13 677 154 696 84 b 755 -29 726 -16 737 -29 b 791 -16 765 -29 776 -24 z'\n },\n 'ornamentPrecompDoubleCadenceUpperPrefix': {\n 'x_min': 0,\n 'x_max': 1246,\n 'y_min': -30,\n 'y_max': 296.0302860502196,\n 'ha': 326.0302860502196,\n 'o': 'm 360 -43 b 559 59 445 -43 503 7 b 698 236 615 111 652 179 b 714 248 704 243 710 248 b 727 235 719 248 721 243 l 848 42 b 883 12 860 22 870 12 b 917 32 891 12 903 19 b 946 62 927 42 939 50 b 1037 192 972 108 1009 147 b 1057 210 1044 204 1051 210 b 1076 190 1063 210 1068 203 l 1176 12 b 1215 -19 1188 -9 1201 -19 b 1250 -6 1225 -19 1237 -14 b 1284 27 1264 3 1274 16 b 1380 190 1323 78 1351 135 b 1395 210 1384 197 1385 210 b 1413 190 1405 210 1410 197 b 1508 40 1436 134 1467 85 b 1564 3 1529 14 1547 3 b 1617 32 1580 3 1597 12 b 1767 238 1678 92 1719 167 b 1794 310 1781 259 1791 282 b 1752 294 1776 317 1764 304 b 1656 164 1711 258 1689 206 b 1629 144 1646 151 1637 144 b 1603 161 1620 144 1613 150 b 1502 315 1562 207 1525 258 b 1452 357 1490 344 1470 357 b 1397 320 1431 357 1411 344 b 1316 170 1368 271 1345 219 b 1280 127 1306 154 1303 127 b 1244 171 1256 127 1254 154 b 1145 337 1210 226 1179 282 b 1110 363 1135 354 1122 363 b 1070 338 1097 363 1084 354 b 1050 311 1063 330 1057 320 b 959 181 1017 271 992 223 b 939 167 950 173 945 167 b 920 184 933 167 927 173 b 818 343 887 238 852 291 b 759 395 795 377 778 395 b 701 344 742 395 724 377 b 698 338 700 341 700 340 b 544 154 652 272 605 207 b 412 98 501 117 458 98 b 304 130 377 98 341 108 b 95 373 204 187 144 275 b 58 426 85 393 82 428 b 19 366 26 426 26 389 b 0 307 13 346 0 327 b 4 287 0 300 1 294 b 174 36 49 194 91 102 b 360 -43 230 -9 289 -43 z'\n },\n 'ornamentPrecompDoubleCadenceUpperPrefixTurn': {\n 'x_min': 0,\n 'x_max': 1226,\n 'y_min': -237,\n 'y_max': 436,\n 'ha': 673,\n 'o': 'm 1279 -341 b 1293 -252 1293 -307 1295 -278 b 1277 36 1287 -156 1282 -59 l 1273 118 b 1318 176 1289 137 1303 157 b 1349 203 1332 193 1342 203 b 1378 168 1359 203 1367 192 b 1456 35 1401 122 1428 78 b 1511 -12 1476 3 1493 -12 b 1568 23 1526 -12 1544 0 b 1597 53 1578 32 1588 42 b 1705 186 1629 101 1669 143 b 1761 284 1728 216 1751 246 b 1765 300 1763 288 1765 295 b 1763 307 1765 302 1765 305 b 1737 302 1754 311 1744 308 b 1718 287 1729 298 1725 292 b 1598 145 1673 245 1637 194 b 1578 130 1590 135 1584 130 b 1557 147 1571 130 1565 135 b 1447 321 1516 202 1488 265 b 1403 351 1433 341 1417 351 b 1358 323 1388 351 1372 341 b 1269 209 1329 285 1299 248 b 1254 521 1264 314 1259 418 b 1228 616 1253 554 1247 588 b 1218 628 1224 621 1223 628 l 1215 628 b 1201 613 1210 626 1202 619 b 1200 600 1200 609 1200 605 l 1200 586 b 1211 348 1204 507 1207 428 b 1217 166 1214 288 1215 226 b 1202 181 1212 168 1208 174 b 1094 334 1168 233 1130 284 b 1048 366 1079 356 1064 366 b 1004 331 1034 366 1018 354 b 904 154 969 275 930 220 b 873 202 887 171 880 187 b 778 356 845 256 819 311 b 737 379 763 372 750 379 b 698 353 724 379 711 370 l 621 232 b 415 114 570 154 495 114 b 302 138 377 114 340 121 b 73 400 187 192 117 284 b 55 420 69 415 62 420 b 42 410 50 420 45 416 b 0 292 23 373 0 334 b 4 262 0 282 1 272 b 168 39 32 168 92 99 b 359 -26 225 -6 292 -26 b 585 76 446 -26 530 10 b 668 202 616 115 641 160 b 693 228 680 219 687 228 b 720 203 700 228 707 219 b 801 63 752 160 775 111 b 844 7 812 42 818 7 b 910 66 877 6 894 39 b 923 94 916 75 919 85 b 995 219 945 137 968 179 b 1025 184 1009 210 1017 197 b 1119 56 1054 141 1087 98 b 1166 20 1138 32 1152 20 b 1215 50 1181 20 1195 30 b 1221 56 1217 52 1218 55 b 1228 -163 1223 -17 1225 -89 b 1279 -341 1231 -223 1251 -278 z'\n },\n 'ornamentPrecompTrillLowerSuffix': {\n 'x_min': 0,\n 'x_max': 833,\n 'y_min': -309,\n 'y_max': 319,\n 'ha': 628,\n 'o': 'm 778 -444 b 801 -445 785 -444 793 -445 b 1037 -338 894 -445 969 -397 b 1200 37 1149 -240 1200 -109 b 1084 406 1200 171 1172 300 b 1024 444 1064 431 1043 444 b 960 390 999 444 978 426 b 841 163 923 314 886 236 b 812 128 832 150 827 128 b 786 167 796 130 793 153 b 660 418 744 251 716 341 b 599 459 639 445 619 459 b 541 410 577 459 557 444 b 439 197 507 340 474 269 b 422 179 435 190 435 179 b 338 393 392 251 379 328 b 275 439 320 423 298 439 b 212 396 253 439 230 425 b 71 219 170 333 128 268 b 0 45 17 173 16 112 b 68 98 32 62 50 78 b 194 264 112 150 153 209 b 230 292 209 282 219 292 b 264 261 240 292 251 282 b 274 242 268 255 269 248 b 346 46 304 179 325 112 b 376 10 351 32 354 10 b 412 35 392 10 403 22 b 452 107 429 56 441 82 b 541 291 481 168 511 230 b 556 307 547 302 552 307 b 573 295 562 307 567 302 b 624 217 595 272 611 246 b 721 1 657 145 685 72 b 755 -27 732 -19 742 -27 b 786 -16 765 -27 775 -24 b 857 73 819 7 840 39 b 952 256 887 134 920 194 b 978 289 963 279 969 289 b 1009 262 985 289 994 281 b 1030 235 1017 253 1024 245 b 1110 -4 1071 161 1099 81 b 1116 -68 1113 -26 1116 -48 b 1009 -243 1116 -140 1090 -200 b 848 -291 956 -272 901 -291 b 730 -261 809 -291 770 -282 b 696 -248 714 -252 703 -248 b 671 -284 684 -248 678 -258 l 662 -312 b 657 -357 658 -330 657 -344 b 744 -439 657 -403 683 -425 z'\n },\n 'stringsDownBow': {\n 'x_min': 0,\n 'x_max': 306,\n 'y_min': -0.09607201951262866,\n 'y_max': 366,\n 'ha': 366.09607201951263,\n 'o': 'm 405 0 b 425 17 413 -1 420 9 b 439 66 435 32 439 48 b 441 268 439 137 441 202 b 436 412 441 314 439 361 l 435 413 b 423 469 435 436 431 456 b 344 508 406 501 373 501 b 204 527 298 520 251 527 b 60 498 156 527 108 518 b 7 438 32 485 10 468 l 7 426 b 4 337 7 396 7 367 b 0 140 0 272 0 206 b 1 42 0 107 0 73 b 13 3 1 27 -3 4 b 40 39 29 3 35 24 b 42 53 42 43 40 49 b 49 141 48 84 49 112 b 48 215 49 167 48 192 b 49 252 48 228 48 240 l 49 312 b 130 343 72 331 99 340 b 206 347 156 346 180 347 b 372 314 262 347 318 338 l 390 307 l 390 245 b 390 138 392 212 390 176 b 397 23 390 101 392 62 b 405 0 399 14 393 1 z'\n },\n 'stringsUpBow': {\n 'x_min': 0,\n 'x_max': 219.2842808242076,\n 'y_min': 0,\n 'y_max': 489,\n 'ha': 489,\n 'o': 'm 150 0 l 151 0 b 184 42 170 12 180 26 b 297 554 223 212 261 382 b 315 690 305 598 318 645 b 304 704 315 697 311 704 b 276 670 288 704 282 697 b 157 131 236 490 196 311 l 157 144 b 73 526 134 276 104 396 b 30 677 60 576 52 638 b 13 694 26 684 22 694 b 0 674 9 694 0 691 l 0 671 b 10 603 3 649 6 626 b 105 174 42 461 72 317 b 150 0 117 117 128 58 z'\n },\n 'stringsHarmonic': {\n 'x_min': 0,\n 'x_max': 191,\n 'y_min': 0,\n 'y_max': 202,\n 'ha': 202,\n 'o': 'm 143 0 b 275 122 217 0 275 53 b 127 291 275 206 202 291 b 0 154 63 291 0 222 b 143 0 0 76 71 0 z m 122 68 b 43 105 89 66 59 75 b 39 124 40 111 39 117 b 79 199 39 148 56 180 b 145 226 101 216 122 226 b 199 210 163 226 180 220 b 235 150 223 196 235 173 b 203 92 235 128 225 107 b 122 68 181 76 150 68 z'\n },\n 'pluckedSnapPizzicatoAbove': {\n 'x_min': 0,\n 'x_max': 201,\n 'y_min': 0,\n 'y_max': 325,\n 'ha': 325,\n 'o': 'm 171 0 b 289 99 240 0 289 45 b 258 183 289 130 274 156 b 174 269 236 217 203 240 l 174 408 b 174 429 174 415 176 422 b 131 468 168 451 153 468 b 117 451 120 468 117 461 b 118 429 117 444 118 435 b 115 307 117 389 115 347 b 0 166 59 295 0 223 b 171 0 0 85 89 0 z m 134 55 b 52 131 84 55 52 85 b 115 233 52 179 81 209 b 114 192 114 220 114 206 b 174 120 114 137 114 137 l 174 228 b 233 148 200 207 223 183 b 236 130 235 143 236 135 b 197 72 236 105 223 85 b 134 55 177 60 157 55 z'\n },\n 'pluckedSnapPizzicatoBelow': {\n 'x_min': 0,\n 'x_max': 211,\n 'y_min': 0,\n 'y_max': 307,\n 'ha': 307,\n 'o': 'm 145 7 b 163 0 153 3 158 0 b 173 23 170 0 173 7 l 173 140 l 170 140 l 170 163 l 171 163 b 206 170 179 164 193 166 b 304 287 264 186 304 233 b 281 354 304 308 297 333 b 118 442 240 412 186 439 b 0 324 69 442 0 370 b 115 176 0 266 55 202 l 115 56 b 145 7 114 33 125 19 z m 115 220 b 62 256 92 223 73 230 b 53 292 56 269 53 281 b 78 344 53 311 60 328 b 168 384 105 372 135 384 b 213 376 183 384 199 382 b 253 321 239 366 253 346 b 246 291 253 311 251 301 b 170 226 230 256 203 236 l 170 258 b 148 305 171 278 163 292 b 128 315 143 310 135 315 l 124 315 b 115 301 117 314 115 308 z'\n },\n 'pluckedLeftHandPizzicato': {\n 'x_min': 0,\n 'x_max': 271,\n 'y_min': 0,\n 'y_max': 284,\n 'ha': 284,\n 'o': 'm 213 0 b 223 14 222 0 223 7 b 222 35 223 22 222 29 l 222 176 b 373 170 272 174 323 170 b 390 180 382 170 390 171 l 390 184 b 347 232 386 207 382 232 b 219 238 307 233 266 235 l 219 364 b 171 409 219 395 193 409 b 156 393 160 409 156 402 b 158 370 156 384 158 376 l 158 240 b 16 239 115 240 66 239 b 0 226 7 239 0 238 l 0 223 b 50 179 1 203 29 179 b 158 177 86 179 122 179 l 158 63 b 161 29 158 52 158 40 b 213 0 166 -1 194 1 z'\n },\n 'keyboardPedalPed': {\n 'x_min': 0,\n 'x_max': 944,\n 'y_min': -13,\n 'y_max': 550,\n 'ha': 563,\n 'o': 'm 22 0 b 109 78 53 0 105 46 l 144 333 b 163 376 147 347 140 372 b 364 465 238 390 301 426 b 454 599 416 497 454 540 b 452 618 454 605 454 612 b 320 770 442 694 396 747 b 248 779 295 778 272 779 b 193 778 229 779 212 779 b 160 780 181 778 167 775 b 137 792 153 789 144 791 b 109 789 128 792 118 789 b 7 719 59 789 48 737 b 23 708 16 714 20 708 b 36 710 29 710 33 710 b 53 684 52 710 53 698 l 53 674 b 43 386 53 577 53 482 b 20 164 36 312 30 238 b 1 30 14 120 7 75 b 0 19 0 26 0 22 b 22 0 0 9 4 0 z m 393 -17 b 634 145 494 16 579 52 b 638 160 636 151 638 156 b 625 168 638 166 634 168 b 621 167 624 168 622 168 b 524 118 582 164 544 160 b 495 79 517 104 505 92 b 435 33 471 49 452 33 b 380 96 416 33 397 55 b 369 145 373 114 369 131 b 442 225 369 186 395 213 b 468 232 451 228 459 229 b 654 344 539 255 606 285 b 677 395 667 360 677 376 b 672 415 677 402 675 408 b 612 459 661 442 639 455 b 589 461 602 461 592 461 b 348 328 500 461 409 408 b 269 120 302 268 269 199 b 379 -19 269 45 318 -19 b 393 -17 383 -19 389 -19 z m 395 240 b 494 383 418 300 452 344 l 521 405 b 544 419 528 409 536 418 b 554 415 547 419 550 418 b 570 383 564 406 570 396 l 570 379 b 552 331 570 360 562 344 b 395 240 511 285 462 253 z m 171 425 b 156 442 160 425 156 429 b 157 475 157 452 157 464 b 164 602 161 517 164 560 b 161 698 164 635 163 667 b 184 729 161 720 167 729 l 193 729 b 348 563 278 719 348 641 b 346 539 348 554 347 547 b 171 425 328 459 229 422 z m 827 89 b 792 111 815 89 804 96 b 766 204 775 131 766 158 b 845 360 772 256 799 314 b 871 372 854 369 863 372 b 897 366 880 372 888 369 b 978 279 942 353 963 320 b 976 259 981 272 981 265 b 858 104 942 203 909 147 b 827 89 847 94 837 89 z m 979 6 b 1008 13 986 6 995 9 b 1081 101 1047 29 1079 46 b 1116 449 1087 217 1104 333 b 1143 654 1123 518 1133 586 b 1148 685 1145 664 1148 675 b 1140 704 1148 693 1146 700 b 1107 716 1130 713 1119 716 b 1056 706 1092 716 1073 710 b 1037 671 1035 703 1038 685 b 1004 439 1025 595 1014 517 b 986 419 1001 428 999 419 b 979 419 985 419 982 420 b 935 426 965 423 949 425 b 795 376 884 426 838 405 b 664 153 714 323 664 249 b 665 130 664 145 665 138 b 753 29 671 65 704 29 b 815 40 773 29 792 33 b 975 147 873 65 923 101 b 965 45 971 108 968 76 b 979 6 963 17 966 6 z m 1282 12 b 1336 35 1303 14 1320 23 b 1359 71 1351 45 1359 58 b 1338 102 1359 82 1352 95 b 1254 130 1312 118 1284 130 b 1187 88 1223 130 1202 109 b 1178 65 1182 81 1178 72 b 1195 37 1178 55 1182 45 b 1282 12 1223 23 1253 19 z'\n },\n 'keyboardPedalUp': {\n 'x_min': 0,\n 'x_max': 436.6015132318337,\n 'y_min': 0,\n 'y_max': 461,\n 'ha': 461,\n 'o': 'm 330 0 b 334 1 331 0 333 0 b 340 12 338 4 340 7 l 338 26 b 340 264 338 105 338 184 b 526 95 400 206 461 148 b 559 71 536 88 547 71 b 564 72 560 71 563 71 b 580 121 580 79 580 102 l 580 127 b 543 203 585 158 573 184 b 472 259 518 219 495 238 l 445 285 b 590 292 494 288 541 291 b 622 318 609 294 618 302 b 628 359 625 331 626 346 b 586 402 632 393 621 405 b 464 395 546 399 504 396 l 559 491 b 567 524 567 500 567 510 b 564 543 567 527 567 536 b 539 596 559 563 560 590 b 494 564 521 600 508 577 b 340 413 442 514 390 464 l 340 560 b 287 664 340 600 321 632 b 271 518 274 612 272 566 b 268 445 269 494 269 469 b 117 569 219 488 168 530 b 96 579 109 575 102 579 b 85 560 89 579 85 573 b 124 446 85 518 82 477 b 209 380 153 426 181 403 b 45 374 154 377 99 376 b 0 324 9 374 0 359 b 63 266 0 265 1 265 b 144 272 89 269 117 272 l 196 272 b 108 193 167 246 138 219 b 60 135 76 164 60 151 b 99 73 60 121 73 105 b 104 68 101 72 102 71 b 114 58 107 60 111 58 b 130 66 120 58 124 62 b 259 186 173 107 217 145 b 256 117 259 163 256 140 b 311 13 256 72 271 37 b 330 0 317 10 323 0 z'\n },\n 'pictChokeCymbal': {\n 'x_min': 1,\n 'x_max': 147,\n 'y_min': 0,\n 'y_max': 242,\n 'ha': 242,\n 'o': 'm 79 4 b 207 158 153 32 192 88 b 212 200 210 173 212 187 b 143 336 212 253 187 298 b 98 348 131 344 115 348 b 4 295 60 348 16 327 b 1 276 1 289 1 282 b 9 249 1 266 3 258 b 121 183 35 206 72 183 b 156 186 132 183 144 183 b 26 53 134 115 91 73 b 7 39 13 49 7 45 b 19 20 7 33 12 27 b 59 0 30 9 43 0 b 79 4 65 0 72 1 z'\n },\n 'wiggleArpeggiatoUp': {\n 'x_min': -22,\n 'x_max': 300,\n 'y_min': 0,\n 'y_max': 176,\n 'ha': 176,\n 'o': 'm 173 4 b 196 0 180 1 189 0 b 246 26 215 0 230 9 b 301 117 271 53 285 85 b 312 131 305 125 307 131 b 327 124 315 131 321 128 b 373 86 341 112 353 101 b 412 69 389 75 402 69 b 432 94 425 69 432 79 b 373 181 432 117 413 154 b 235 252 323 216 285 245 b 220 253 229 253 225 253 b 168 215 196 253 181 240 b 111 112 151 180 140 141 b 94 102 105 105 99 102 b 78 111 89 102 84 105 b 0 181 55 135 35 160 b -32 153 -20 194 -32 168 b 0 86 -32 124 -32 109 b 94 36 22 71 73 46 b 173 4 134 16 131 17 z'\n },\n 'arrowheadBlackUp': {\n 'x_min': 186,\n 'x_max': 820,\n 'y_min': -1000,\n 'y_max': 1000,\n 'ha': 2000,\n 'o': 'm 1181 1440 l 268 1440 l 268 -1440 l 1181 -1440 z m 959 -524 l 959 -850 l 481 -850 l 481 -524 z m 864 -619 l 576 -619 l 576 -755 l 864 -755 z m 959 -26 l 959 -351 l 481 -351 l 481 -26 l 576 -26 l 576 -256 l 864 -256 l 864 -121 l 769 -121 l 769 -187 l 671 -187 l 671 -26 z m 959 325 l 959 37 l 481 37 l 481 135 l 864 135 l 864 325 z m 959 498 l 959 403 l 769 403 l 769 202 l 481 202 l 481 297 l 671 297 l 671 403 l 481 403 l 481 498 z m 671 778 l 576 778 l 576 674 l 671 674 z m 769 876 l 769 674 l 959 674 l 959 576 l 481 576 l 481 876 z m 959 1247 l 959 1152 l 769 1152 l 769 1045 l 959 1045 l 959 950 l 481 950 l 481 1045 l 671 1045 l 671 1152 l 484 1152 l 484 1247 z m 959 -916 l 959 -1011 l 867 -1011 l 665 -1146 l 959 -1146 l 959 -1241 l 481 -1241 l 481 -1146 l 683 -1011 l 481 -1011 l 481 -916 z'\n },\n 'arrowheadBlackDown': {\n 'x_min': 186,\n 'x_max': 820,\n 'y_min': -1000,\n 'y_max': 1000,\n 'ha': 2000,\n 'o': 'm 1181 1440 l 268 1440 l 268 -1440 l 1181 -1440 z m 959 -524 l 959 -850 l 481 -850 l 481 -524 z m 864 -619 l 576 -619 l 576 -755 l 864 -755 z m 959 -26 l 959 -351 l 481 -351 l 481 -26 l 576 -26 l 576 -256 l 864 -256 l 864 -121 l 769 -121 l 769 -187 l 671 -187 l 671 -26 z m 959 325 l 959 37 l 481 37 l 481 135 l 864 135 l 864 325 z m 959 498 l 959 403 l 769 403 l 769 202 l 481 202 l 481 297 l 671 297 l 671 403 l 481 403 l 481 498 z m 671 778 l 576 778 l 576 674 l 671 674 z m 769 876 l 769 674 l 959 674 l 959 576 l 481 576 l 481 876 z m 959 1247 l 959 1152 l 769 1152 l 769 1045 l 959 1045 l 959 950 l 481 950 l 481 1045 l 671 1045 l 671 1152 l 484 1152 l 484 1247 z m 959 -916 l 959 -1011 l 867 -1011 l 665 -1146 l 959 -1146 l 959 -1241 l 481 -1241 l 481 -1146 l 683 -1011 l 481 -1011 l 481 -916 z'\n },\n 'arpeggiatoUp': {\n 'x_min': 0,\n 'x_max': 262,\n 'y_min': 0,\n 'y_max': 1459,\n 'ha': 1459,\n 'o': 'm 190 0 b 160 63 187 29 170 45 b 145 108 150 81 145 95 b 183 163 145 128 157 145 b 300 246 222 190 262 216 b 347 318 333 272 347 295 b 301 393 347 341 331 364 b 258 413 289 403 272 408 b 145 449 220 425 183 436 b 117 464 135 452 120 452 b 140 491 115 477 128 484 b 294 593 192 526 243 557 b 330 647 318 611 330 626 b 314 693 330 660 324 675 b 262 736 302 714 285 729 b 170 763 230 744 200 753 b 122 783 153 768 125 768 b 160 831 120 804 143 818 b 288 922 202 861 246 890 b 333 999 318 945 333 972 b 266 1083 333 1032 310 1064 b 189 1115 240 1094 215 1103 b 122 1178 145 1133 122 1153 b 168 1250 122 1200 138 1223 l 180 1257 b 269 1333 210 1283 240 1306 b 305 1405 294 1356 305 1381 b 284 1469 305 1426 298 1447 b 228 1525 269 1492 251 1511 b 183 1600 197 1545 183 1571 b 190 1640 183 1613 184 1626 b 197 1670 193 1650 194 1660 b 272 1735 213 1719 230 1735 b 295 1734 279 1735 287 1735 b 323 1732 305 1732 314 1732 b 350 1731 333 1732 341 1732 b 377 1742 369 1729 377 1732 b 370 1761 377 1747 374 1754 l 301 1898 b 217 2066 274 1954 248 2012 b 186 2101 204 2089 196 2101 b 154 2069 177 2101 167 2091 b 12 1824 105 1987 59 1907 b 0 1787 4 1810 0 1797 b 59 1744 0 1761 20 1745 b 160 1738 92 1744 125 1740 b 145 1692 156 1721 151 1706 b 135 1633 138 1672 135 1652 b 184 1518 135 1591 151 1552 b 229 1475 199 1503 213 1488 b 259 1431 249 1456 259 1444 b 229 1388 259 1420 249 1407 b 151 1325 203 1365 177 1345 b 105 1279 134 1310 118 1296 b 73 1202 84 1251 73 1227 b 108 1123 73 1176 85 1152 b 255 1031 148 1077 199 1051 b 282 1014 274 1025 282 1021 b 262 991 282 1008 275 1001 b 151 914 226 963 189 939 b 79 851 125 896 99 877 b 63 809 69 837 63 824 b 79 769 63 796 68 783 b 202 697 111 729 154 710 b 266 670 225 690 266 688 b 210 622 266 648 232 635 b 82 534 167 593 120 570 b 55 491 63 518 55 505 b 79 448 55 478 63 465 b 255 361 127 395 192 380 b 288 343 269 359 288 357 b 266 312 288 331 275 320 b 144 223 229 278 184 253 b 85 134 104 193 85 166 b 118 53 85 111 96 85 b 190 0 135 29 160 14 z'\n },\n 'arpeggiatoDown': {\n 'x_min': 0,\n 'x_max': 218,\n 'y_min': 0,\n 'y_max': 1440,\n 'ha': 1440,\n 'o': 'm 161 16 b 310 261 210 98 259 180 b 314 275 312 266 314 271 b 302 295 314 282 310 289 b 252 311 287 308 269 311 b 217 310 240 311 229 310 b 190 333 202 310 194 315 b 151 412 186 363 171 389 b 102 501 120 452 102 477 b 150 588 102 524 118 547 b 161 603 154 592 158 598 b 181 661 176 622 181 641 b 173 704 181 675 179 690 b 86 795 156 746 121 770 b 53 829 63 811 53 819 b 78 868 53 840 62 851 b 102 888 85 876 94 883 b 180 956 128 912 156 933 b 216 1028 204 979 216 1002 b 203 1081 216 1044 212 1061 b 115 1171 186 1123 148 1145 b 75 1221 88 1191 75 1207 b 114 1272 75 1237 88 1251 b 173 1308 132 1284 154 1296 b 226 1339 190 1318 209 1328 b 265 1405 253 1359 265 1380 b 258 1447 265 1418 264 1431 b 154 1541 242 1499 199 1521 b 109 1581 124 1555 109 1567 b 141 1627 109 1594 121 1608 b 204 1680 163 1646 184 1662 b 233 1742 223 1699 233 1719 b 226 1777 233 1752 230 1764 b 135 1862 210 1822 173 1840 b 104 1895 114 1875 104 1884 b 118 1930 104 1904 109 1914 b 192 2006 135 1961 161 1986 b 206 2029 203 2013 206 2022 b 192 2064 206 2040 197 2052 b 180 2074 187 2071 184 2074 b 156 2061 171 2074 163 2065 b 84 1983 125 2040 102 2013 b 65 1921 71 1961 65 1941 b 88 1853 65 1899 72 1876 b 171 1784 108 1820 138 1801 b 190 1764 184 1777 190 1770 b 174 1741 190 1757 184 1750 b 107 1683 153 1722 128 1704 b 68 1610 81 1659 68 1636 b 88 1548 68 1591 75 1571 b 177 1470 109 1512 141 1489 b 223 1431 209 1453 223 1443 b 179 1390 223 1420 209 1408 b 128 1361 163 1380 145 1371 b 71 1322 108 1348 88 1338 b 32 1253 45 1300 32 1277 b 48 1198 32 1236 37 1218 b 147 1090 71 1152 108 1120 b 174 1057 166 1076 174 1067 b 153 1022 174 1047 167 1037 b 109 982 140 1008 124 995 b 37 919 85 962 59 942 b 9 860 17 899 9 880 b 26 806 9 844 14 827 b 120 717 50 769 84 740 b 138 691 132 708 138 700 b 130 668 138 684 135 677 b 92 618 118 651 105 635 b 59 531 71 589 59 560 b 84 455 59 507 68 481 b 132 386 98 431 115 408 b 148 341 144 372 148 357 b 144 317 148 333 147 324 b 121 305 140 307 131 305 l 98 305 b 82 304 94 304 88 304 l 32 304 b 0 292 10 304 0 302 b 12 266 0 287 4 279 b 60 164 32 233 46 199 b 127 20 84 117 105 68 b 144 0 132 9 137 0 b 161 16 150 0 154 4 z'\n },\n 'repeat1Bar': {\n 'x_min': 0,\n 'x_max': 599.1057280164835,\n 'y_min': -250,\n 'y_max': 175,\n 'ha': 425,\n 'o': 'm 76 -334 b 181 -285 111 -315 148 -302 b 831 52 396 -168 613 -58 b 863 114 855 63 864 82 b 828 202 855 140 855 176 b 808 213 821 209 815 213 b 793 209 804 213 799 212 l 422 19 b 26 -179 291 -48 164 -124 b 0 -213 10 -186 0 -196 b 3 -232 0 -219 0 -225 b 52 -325 14 -265 37 -294 b 66 -337 55 -331 59 -337 b 76 -334 69 -337 72 -336 z m 216 98 b 255 75 236 84 246 75 b 291 104 265 75 274 85 b 323 147 304 117 327 125 b 289 215 323 168 314 184 b 238 252 269 239 253 252 b 187 222 222 252 207 242 b 173 206 183 216 177 212 b 157 170 163 194 157 183 b 174 138 157 160 161 150 b 216 98 189 127 200 109 z m 769 -360 b 829 -264 779 -360 829 -284 b 769 -176 822 -232 799 -200 b 742 -163 760 -167 750 -163 b 716 -184 733 -163 723 -168 b 683 -228 708 -202 693 -213 b 672 -253 675 -236 672 -245 b 683 -281 672 -262 675 -271 b 752 -353 703 -308 732 -327 b 769 -360 756 -357 763 -360 z'\n },\n 'repeat2Bars': {\n 'x_min': 0.008571918423331715,\n 'x_max': 775,\n 'y_min': -246.92374029115243,\n 'y_max': 362.82068246705313,\n 'ha': 609.7444227582056,\n 'o': 'm 909 412 b 873 351 906 384 893 367 b 436 50 729 249 585 147 b 91 -179 321 -26 206 -102 b 62 -174 76 -189 68 -183 b 12 -96 48 -147 24 -125 b 36 -16 -7 -53 -6 -43 b 220 104 96 24 158 65 b 819 507 425 232 624 369 b 881 495 852 530 861 528 b 909 412 899 469 900 439 z m 1116 228 b 1067 158 1115 192 1092 174 b 910 59 1015 125 963 92 b 478 -240 762 -33 622 -140 b 311 -350 423 -279 366 -314 b 285 -344 298 -360 289 -356 b 239 -258 272 -314 251 -288 b 261 -196 228 -228 235 -210 b 517 -29 348 -144 436 -91 b 1030 321 681 98 861 202 b 1093 307 1060 343 1076 340 b 1116 228 1107 281 1109 252 z m 1070 -105 b 1020 -210 1057 -143 1038 -176 b 998 -210 1014 -219 1004 -215 b 924 -153 973 -192 949 -171 b 913 -88 899 -135 897 -112 b 949 -22 926 -66 939 -45 b 998 -7 960 6 976 9 b 1070 -105 1032 -32 1058 -63 z m 333 338 b 302 240 330 307 317 274 b 276 235 297 225 287 228 b 233 269 262 246 248 258 b 203 376 186 307 183 318 b 225 441 212 397 217 419 b 246 454 228 452 232 458 b 333 338 284 441 333 380 z'\n },\n 'repeat4Bars': {\n 'x_min': 0,\n 'x_max': 1374,\n 'y_min': -304,\n 'y_max': 304,\n 'ha': 608,\n 'o': 'm 815 -367 b 829 -359 819 -367 824 -364 b 851 -343 835 -353 844 -347 b 1375 6 1027 -228 1205 -117 l 1610 170 b 1644 235 1632 184 1643 203 b 1626 300 1639 253 1634 276 b 1590 337 1614 325 1604 337 b 1551 320 1580 337 1567 330 b 873 -135 1329 161 1103 10 b 749 -222 829 -161 785 -184 b 737 -245 742 -230 737 -238 b 742 -261 737 -249 739 -255 b 802 -357 755 -297 782 -325 b 815 -367 805 -363 809 -367 z m 291 148 b 325 223 302 148 308 170 b 333 256 328 235 330 246 b 264 363 330 305 298 336 b 242 373 255 369 248 373 b 220 347 232 373 225 364 b 202 288 216 327 213 305 b 190 252 193 275 190 262 b 222 200 190 232 202 215 b 291 148 264 170 279 148 z m 78 -266 b 92 -258 82 -266 88 -264 b 114 -240 98 -251 107 -246 b 638 107 289 -125 467 -14 b 873 271 716 161 793 216 b 907 337 894 285 906 305 b 887 400 901 354 897 379 b 852 438 877 426 867 438 b 814 420 842 438 829 432 b 135 -33 592 262 366 111 b 12 -121 92 -60 48 -84 b 0 -144 4 -128 0 -135 b 4 -160 0 -148 1 -154 b 63 -255 17 -196 45 -223 b 78 -266 68 -262 72 -266 z m 396 -360 b 408 -356 400 -360 403 -359 b 609 -223 471 -307 543 -269 b 896 -19 706 -156 795 -81 b 1164 154 985 37 1074 96 b 1214 223 1189 170 1211 187 b 1176 321 1204 253 1205 292 b 1159 330 1169 327 1165 330 b 1145 324 1155 330 1151 328 b 1048 258 1113 302 1081 278 b 357 -202 809 117 598 -65 b 333 -238 341 -212 333 -223 b 338 -262 333 -245 334 -253 b 384 -350 350 -294 372 -318 b 396 -360 386 -354 390 -360 z m 1162 -438 b 1174 -433 1166 -438 1169 -436 b 1374 -300 1237 -384 1309 -346 b 1660 -96 1470 -233 1561 -158 b 1930 76 1751 -39 1840 19 b 1979 147 1954 92 1977 109 b 1943 243 1968 177 1971 216 b 1924 253 1935 251 1930 253 b 1911 248 1920 253 1915 252 b 1814 181 1878 225 1848 202 b 1123 -279 1575 40 1364 -141 b 1099 -315 1106 -289 1099 -300 b 1103 -338 1099 -321 1100 -330 b 1149 -426 1115 -370 1138 -396 b 1162 -438 1151 -432 1156 -438 z m 1875 -295 b 1882 -291 1878 -295 1879 -294 b 1934 -189 1904 -258 1921 -223 b 1872 -96 1925 -147 1901 -120 b 1840 -78 1858 -84 1848 -78 b 1812 -109 1830 -78 1823 -88 l 1777 -173 b 1770 -199 1773 -181 1770 -190 b 1786 -230 1770 -210 1774 -220 b 1862 -289 1809 -253 1837 -269 b 1875 -295 1865 -292 1871 -295 z'\n },\n 'repeatBarSlash': {\n 'x_min': 0,\n 'x_max': 630,\n 'y_min': -225.19160170741762,\n 'y_max': 265.12618221237005,\n 'ha': 490.31778391978764,\n 'o': 'm 78 -324 b 92 -314 82 -325 88 -321 b 114 -298 96 -307 107 -302 b 638 49 289 -183 467 -72 b 873 215 716 104 792 161 b 907 279 894 229 906 248 b 887 344 901 298 897 321 b 852 382 877 369 867 380 b 814 363 842 383 829 376 b 135 -91 603 192 364 55 b 12 -177 92 -118 45 -137 b 0 -202 4 -186 0 -192 b 4 -217 0 -206 1 -212 b 63 -312 17 -253 42 -284 b 78 -324 68 -318 72 -323 z'\n }\n },\n 'fontFamily': 'Petaluma',\n 'resolution': 1000,\n 'generatedOn': '2020-04-13T11:57:51.948Z'\n};\n","export const CustomMetrics = {\n name: 'Vexflow-Custom',\n smufl: false,\n glyphs: {}\n};\n","export const CustomFont = {\n 'resolution': 1000,\n 'familyName': 'VexflowCustom',\n 'glyphs': {\n 'noteheadSquareWhite': {\n 'x_min': 0,\n 'x_max': 430.75,\n 'ha': 386,\n 'o': 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 l 50 150 l 380 150 l 380 -150 l 50 -150 l 50 150 '\n },\n 'noteheadSquareBlack': {\n 'x_min': 0,\n 'x_max': 430.75,\n 'ha': 386,\n 'o': 'm 0 200 l 0 -200 l 430 -200 l 430 200 l 0 200 '\n },\n 'accidentalBuyukMucennebFlat': {\n 'x_min': -171.5,\n 'x_max': 251.8125,\n 'ha': 257,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 553 20 616 20 614 b 20 491 20 503 20 491 l 20 491 b 153 535 47 501 149 535 b 174 514 167 535 174 524 b 164 496 174 508 171 501 b 92 470 164 495 132 484 l 20 445 l 20 390 b 20 363 20 378 20 370 b 20 333 20 340 20 333 l 20 333 b 153 377 47 344 149 377 b 174 356 167 377 174 367 b 164 338 174 349 171 342 b 92 312 164 338 132 326 l 20 288 l 20 219 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b -1 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 30 -21 -212 -21 -212 b -21 273 -21 163 -21 273 b -84 252 -21 273 -50 263 b -152 230 -133 234 -145 230 b -157 231 -155 230 -156 231 b -171 252 -166 234 -171 244 b -160 270 -171 259 -167 266 b -27 316 -159 270 -93 294 l -21 319 l -21 374 b -21 431 -21 406 -21 431 b -84 409 -21 431 -50 421 b -152 388 -133 392 -145 388 b -157 390 -155 388 -156 388 b -171 409 -166 392 -171 401 b -160 428 -171 417 -167 424 b -27 474 -159 428 -93 451 l -21 476 l -21 546 b -20 620 -21 614 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 '\n },\n 'accidentalBakiyeFlat': {\n 'x_min': -176.9375,\n 'x_max': 251.8125,\n 'ha': 257,\n 'o': 'm -8 631 b -1 632 -6 632 -4 632 b 19 620 8 632 16 628 b 20 503 20 616 20 614 b 20 391 20 442 20 391 b 84 424 20 391 49 406 l 147 456 l 152 456 b 153 456 153 456 153 456 b 175 435 166 456 175 446 b 172 427 175 433 174 430 b 92 380 170 420 172 421 l 20 342 l 20 245 l 20 148 l 21 151 b 137 199 59 183 99 199 b 182 191 152 199 167 197 b 251 84 227 176 251 134 b 228 0 251 58 243 29 b 100 -142 206 -40 178 -72 l 23 -215 b 0 -229 9 -229 6 -229 b -20 -216 -9 -229 -17 -224 b -21 54 -21 -212 -21 -212 b -21 322 -21 201 -21 322 b -85 290 -21 322 -50 308 l -148 256 l -153 256 b -155 256 -155 256 -155 256 b -176 277 -167 256 -176 266 b -174 285 -176 280 -175 283 b -93 333 -171 294 -174 292 l -21 370 l -21 494 b -20 620 -21 616 -21 616 b -8 631 -17 624 -13 630 m 110 131 b 96 133 106 133 100 133 b 89 133 93 133 91 133 b 24 87 63 129 40 113 l 20 80 l 20 -37 l 20 -156 l 23 -152 b 144 81 96 -72 144 20 l 144 83 b 110 131 144 113 134 126 '\n },\n 'accidentalKucukMucennebSharp': {\n 'x_min': -1.359375,\n 'x_max': 255.890625,\n 'ha': 261,\n 'o': 'm 118 514 b 127 517 121 517 122 517 b 147 505 136 517 142 513 l 148 502 l 148 403 b 148 306 148 351 148 306 b 174 315 149 306 160 310 l 200 324 l 205 323 b 223 312 213 323 220 319 l 225 308 l 225 260 b 225 245 225 255 225 249 b 220 204 225 208 224 209 b 179 188 216 199 215 199 l 148 177 l 148 124 l 148 70 l 189 84 b 236 98 219 94 230 98 b 247 94 240 98 243 97 b 255 52 254 88 255 87 b 255 33 255 47 255 40 l 254 -12 l 253 -15 b 249 -22 253 -18 250 -20 l 245 -24 l 196 -41 l 148 -58 l 148 -108 b 148 -158 148 -136 148 -158 b 174 -148 148 -158 160 -154 b 204 -140 198 -140 200 -140 l 204 -140 b 224 -152 213 -140 221 -145 b 225 -201 224 -155 225 -177 b 224 -254 225 -226 224 -251 b 157 -284 220 -262 220 -262 l 148 -288 l 148 -395 l 148 -503 l 147 -506 b 127 -519 142 -514 134 -519 b 107 -506 119 -519 111 -514 l 106 -503 l 106 -403 b 106 -303 106 -316 106 -303 b 104 -303 104 -303 104 -303 b 88 -310 104 -303 96 -306 l 63 -319 b 51 -322 59 -320 55 -322 b 36 -315 46 -322 40 -319 b 31 -273 32 -309 31 -312 b 31 -258 31 -269 31 -263 l 31 -210 l 34 -206 b 40 -198 35 -204 38 -199 b 74 -186 42 -197 57 -191 l 106 -173 l 106 -123 b 106 -97 106 -112 106 -104 b 106 -72 106 -76 106 -72 b 104 -72 106 -72 106 -72 b 20 -99 89 -79 23 -99 b 0 -84 10 -99 2 -93 b -1 -37 0 -81 -1 -59 b 0 11 -1 -15 0 9 b 58 40 4 22 2 22 l 106 56 l 106 109 b 106 123 106 115 106 119 b 106 162 106 147 106 162 b 81 155 106 162 93 159 b 50 147 65 149 55 147 b 36 152 43 147 40 148 b 31 194 32 158 31 156 b 31 209 31 198 31 204 l 31 256 l 34 260 b 76 281 38 269 38 269 l 106 292 l 106 396 l 106 502 l 107 505 b 118 514 110 509 114 513 '\n },\n 'accidentalKoron': {\n 'x_min': -20,\n 'x_max': 320,\n 'ha': 257,\n 'o': 'm -8 200 b -8 210 8 200 16 200 l 20 148 -199 l 23 -615 b 0 -629 9 -629 6 -629 l -21 -612 l -21 -201 l -21 216 l -20 200 m 16 200 l 310 0 l 240 0 l 16 140 l 16 -120 l 240 0 l 310 0 l 16 -200 '\n },\n 'accidentalSori': {\n 'x_min': -10.890625,\n 'x_max': 299.4375,\n 'ha': 294,\n 'o': 'm 44 174 b 51 174 47 174 49 174 b 68 173 55 174 61 174 l 287 112 l 551 40 b 615 20 617 22 609 23 b 626 0 622 16 626 8 b 615 -22 626 -9 622 -18 b 613 -23 613 -23 613 -23 b 613 -23 613 -23 613 -23 b 287 -113 613 -24 597 -29 l 68 -174 b 53 -176 61 -176 57 -176 b 39 -172 47 -176 43 -174 b 27 -151 31 -167 27 -159 b 39 -129 27 -141 31 -133 b 230 -74 43 -124 20 -131 l 370 -36 l 468 -9 b 498 0 484 -4 498 -1 b 468 8 498 0 484 2 l 370 34 l 230 73 b 40 126 28 129 43 124 b 27 149 31 131 27 140 b 44 174 27 161 34 170 m 205 110 l 205 300 b 205 330 245 330 245 300 l 245 300 l 245 -300 b 245 -330 205 -330 205 -300 l 205 -300 l 205 110 l 345 90 m 345 90 l 345 330 b 345 360 385 360 385 330 l 385 330 l 385 -270 b 385 -300 345 -300 345 -270 l 345 -270 l 345 90 '\n },\n 'vexAccidentalMicrotonal2': {\n 'x_min': -1.359375,\n 'x_max': 386.5625,\n 'ha': 394,\n 'o': 'm 249 535 b 257 537 251 537 253 537 b 276 524 266 537 273 533 l 277 521 l 279 419 l 279 316 l 304 323 b 337 328 319 326 330 328 b 353 316 347 328 349 324 b 355 266 355 315 355 290 b 353 215 355 241 355 217 b 319 198 349 206 347 205 b 279 187 284 190 279 188 b 279 156 279 187 279 174 b 279 136 279 151 279 144 l 279 84 l 289 87 l 330 98 b 367 105 352 102 362 105 b 378 101 372 105 375 104 b 386 61 385 95 386 94 b 386 40 386 55 386 48 l 386 -5 l 385 -8 b 374 -19 383 -12 378 -18 b 291 -40 372 -19 347 -26 b 279 -43 284 -41 279 -43 b 279 -83 279 -43 279 -59 b 279 -95 279 -87 279 -91 l 279 -145 l 304 -140 b 337 -133 321 -136 330 -133 b 349 -140 343 -133 347 -136 b 355 -181 355 -145 355 -142 l 355 -197 l 355 -210 b 349 -252 355 -249 355 -247 b 300 -269 345 -258 347 -258 b 280 -274 291 -272 281 -273 l 279 -274 l 277 -378 l 277 -483 l 276 -487 b 257 -499 273 -495 265 -499 b 238 -487 249 -499 242 -495 l 236 -483 l 236 -384 l 236 -285 l 235 -285 l 212 -291 l 170 -301 b 148 -308 159 -305 148 -306 b 147 -415 147 -308 147 -313 l 147 -523 l 145 -526 b 126 -538 141 -534 133 -538 b 106 -526 118 -538 110 -534 l 104 -523 l 104 -420 b 103 -317 104 -326 104 -317 b 103 -317 103 -317 103 -317 b 50 -330 92 -322 54 -330 b 31 -317 42 -330 35 -326 b 29 -267 29 -315 29 -315 l 29 -219 l 32 -216 b 92 -192 36 -206 36 -206 l 104 -190 l 104 -138 b 103 -87 104 -91 104 -87 b 103 -87 103 -87 103 -87 b 88 -91 103 -87 96 -88 l 49 -101 b 17 -106 32 -105 23 -106 b 6 -102 13 -106 10 -105 b -1 -62 0 -97 -1 -95 b 0 -41 -1 -56 0 -49 l 0 4 l 1 6 b 10 16 2 11 6 15 b 91 37 12 18 38 24 l 104 41 l 104 93 b 103 144 104 140 104 144 b 103 144 103 144 103 144 b 50 131 92 141 54 131 b 31 144 42 131 35 137 b 29 195 29 147 29 148 l 29 242 l 32 245 b 92 269 36 255 36 255 l 104 273 l 104 377 l 104 481 l 106 485 b 126 498 110 492 118 498 b 134 495 129 498 132 496 b 145 485 138 494 142 489 l 147 481 l 147 383 l 147 283 l 152 284 b 190 294 155 285 171 290 l 230 303 l 236 305 l 236 413 l 236 521 l 238 524 b 249 535 240 528 243 533 m 236 126 b 235 177 236 154 236 177 l 235 177 b 213 172 235 177 225 174 l 170 161 b 147 155 157 158 147 155 b 147 124 147 155 147 142 b 147 102 147 117 147 111 l 147 52 l 153 54 l 228 72 l 236 74 l 236 126 m 236 -105 b 235 -54 236 -65 236 -54 l 235 -54 b 231 -55 235 -54 234 -54 b 172 -69 227 -55 204 -62 l 149 -76 l 147 -76 l 147 -127 l 147 -179 l 152 -177 b 190 -167 155 -177 171 -173 l 230 -158 l 236 -156 l 236 -105 '\n },\n 'vexAccidentalMicrotonal3': {\n 'x_min': 0,\n 'x_max': 430.75,\n 'ha': 360,\n 'o': 'm -146 537 b -138 538 -143 538 -141 538 b -118 525 -129 538 -121 533 b -117 390 -117 522 -117 521 b -115 259 -117 268 -117 259 b -115 259 -115 259 -115 259 b -59 272 -104 263 -62 272 b -39 259 -50 272 -42 267 b -37 209 -38 257 -37 233 b -39 159 -37 185 -38 162 b -85 138 -43 149 -44 149 l -117 131 l -117 21 b -115 -88 -117 -80 -117 -88 b -115 -88 -115 -88 -115 -88 b -59 -75 -104 -84 -62 -75 b -44 -81 -52 -75 -48 -77 b -38 -124 -38 -87 -38 -85 b -38 -138 -38 -124 -38 -138 b -38 -152 -38 -138 -38 -152 b -44 -195 -38 -191 -38 -190 b -85 -209 -48 -200 -48 -200 l -117 -217 l -117 -349 b -118 -486 -117 -481 -117 -482 b -138 -499 -121 -494 -129 -499 b -153 -493 -143 -499 -149 -497 b -159 -415 -158 -487 -159 -496 b -159 -355 -159 -398 -159 -379 b -159 -227 -159 -284 -159 -227 b -205 -238 -159 -227 -180 -232 b -250 -249 -230 -244 -250 -249 b -251 -386 -251 -249 -251 -311 b -252 -525 -251 -521 -251 -522 b -272 -538 -255 -534 -264 -538 b -287 -532 -277 -538 -283 -536 b -293 -452 -292 -527 -293 -536 b -293 -391 -293 -436 -293 -415 b -294 -260 -293 -269 -293 -260 b -294 -260 -294 -260 -294 -260 b -348 -272 -306 -264 -345 -272 b -368 -259 -357 -272 -365 -267 b -369 -209 -369 -257 -369 -233 b -368 -159 -369 -185 -369 -162 b -323 -139 -364 -149 -362 -148 l -293 -131 l -293 -22 b -294 87 -293 80 -293 87 b -294 87 -294 87 -294 87 b -348 75 -306 84 -345 75 b -368 88 -357 75 -365 80 b -369 138 -369 91 -369 114 b -368 188 -369 162 -369 186 b -323 209 -364 198 -362 199 l -293 216 l -293 349 b -292 486 -293 481 -293 482 b -272 499 -288 494 -280 499 b -257 493 -266 499 -261 497 b -251 414 -251 487 -251 496 b -251 354 -251 398 -251 378 b -251 226 -251 284 -251 226 b -205 238 -250 226 -230 231 b -159 249 -180 244 -159 249 b -159 385 -159 249 -159 310 b -157 525 -159 521 -159 522 b -146 537 -156 530 -151 535 z m -159 11 b -159 120 -159 98 -159 120 l -159 120 b -175 116 -160 120 -167 119 b -221 105 -184 114 -204 109 l -251 98 l -251 -12 b -251 -121 -251 -72 -251 -121 b -205 -110 -250 -121 -230 -116 b -159 -99 -180 -104 -159 -99 b -159 11 -159 -99 -159 -49 z m 89 517 b 97 519 92 518 94 519 b 117 505 106 519 114 513 b 119 376 119 502 119 501 l 119 249 l 145 258 b 176 267 169 266 172 267 b 177 267 176 267 177 267 b 196 255 186 267 192 263 l 197 252 l 197 205 b 197 181 197 195 197 187 b 193 149 197 153 197 153 b 152 131 190 144 187 143 l 119 120 l 119 10 b 119 -100 119 -62 119 -100 b 145 -91 120 -100 131 -96 b 173 -82 159 -86 171 -82 b 176 -81 174 -81 175 -81 b 196 -94 185 -81 193 -87 b 198 -151 197 -97 198 -125 b 197 -194 198 -172 197 -192 b 153 -218 193 -203 192 -204 l 119 -230 l 119 -367 l 118 -504 l 117 -507 b 97 -519 113 -514 105 -519 b 82 -512 92 -519 87 -517 b 76 -434 77 -507 76 -516 b 76 -374 76 -418 76 -398 b 76 -245 76 -303 76 -245 b 52 -254 76 -245 65 -249 b 19 -263 34 -260 25 -263 b 6 -257 13 -263 10 -261 b 0 -214 0 -251 0 -253 b 0 -200 0 -210 0 -205 b 0 -188 0 -196 0 -192 b 6 -143 0 -147 0 -149 b 46 -126 10 -139 10 -139 l 76 -115 l 76 -5 b 76 106 76 56 76 106 b 51 98 76 106 64 102 b 18 89 34 92 25 89 b 6 95 13 89 10 91 b 0 139 0 101 0 99 b 0 153 0 143 0 148 b 0 179 0 163 0 172 b 44 225 0 215 3 211 l 76 236 l 76 369 b 78 505 76 501 76 502 b 89 517 80 510 85 515 z '\n },\n 'vexAccidentalMicrotonal4': {\n 'x_min': 0,\n 'x_max': 430.75,\n 'ha': 360,\n 'o': 'm 283 633 b 291 634 286 634 289 634 b 311 621 300 634 308 629 b 313 505 313 618 313 617 b 313 393 313 443 313 393 b 378 425 313 393 343 407 l 443 458 l 448 458 b 449 458 449 458 449 458 b 471 437 462 458 471 448 b 469 429 471 434 470 432 b 387 382 466 421 469 423 l 313 344 l 313 247 l 313 150 l 315 152 b 433 201 353 184 394 201 b 479 193 448 201 464 198 b 549 86 524 177 549 135 b 526 1 549 59 541 29 b 395 -143 504 -39 475 -71 b 316 -214 351 -182 341 -191 b 292 -229 302 -228 300 -229 b 272 -216 283 -229 275 -224 b 271 55 271 -212 271 -212 b 270 323 271 203 270 323 b 205 291 270 323 241 308 l 140 258 l 135 258 b 134 258 135 258 134 258 b 112 279 121 258 112 267 b 114 287 112 281 113 284 b 196 334 117 295 114 293 l 271 371 l 271 495 b 272 621 271 617 271 618 b 283 633 274 626 279 631 z m 404 133 b 391 134 400 134 395 134 b 384 134 388 134 386 134 b 318 88 358 130 335 114 l 313 81 l 313 -37 l 313 -156 l 316 -152 b 439 83 391 -71 439 22 l 439 84 b 404 133 439 115 430 128 z m -8 633 l -8 633 b 0 634 -6 634 -3 634 b 20 621 8 634 17 629 b 21 384 21 618 21 617 l 21 150 l 24 152 b 141 201 62 184 102 201 b 187 193 157 201 172 198 b 257 86 232 177 257 135 b 234 1 257 59 250 29 b 103 -143 212 -39 183 -71 b 24 -214 60 -182 49 -191 b 0 -229 10 -228 8 -229 b -20 -216 -9 -229 -17 -224 l -21 -212 l -21 203 l -21 618 l -20 621 b -8 633 -18 626 -13 631 z m 113 133 l 113 133 b 99 134 109 134 103 134 b 93 134 97 134 94 134 b 26 88 66 130 43 114 l 21 81 l 21 -37 l 21 -156 l 25 -152 b 148 83 99 -71 148 22 l 148 84 b 113 133 148 115 138 128 z '\n },\n 'vexNoteHeadRectBlack': {\n 'x_min': 0,\n 'x_max': 430.75,\n 'ha': 360,\n 'o': 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 '\n },\n 'vexNoteHeadRectWhite': {\n 'x_min': 0,\n 'x_max': 430.75,\n 'ha': 360,\n 'o': 'm 0 150 l 0 -150 l 430 -150 l 430 150 l 0 150 l 50 100 l 380 100 l 380 -100 l 50 -100 l 50 100'\n }\n }\n};\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n/* eslint-disable key-spacing */\n\nimport { Vex } from './vex';\nimport { Fraction } from './fraction';\nimport { Glyph } from './glyph';\nimport { DefaultFontStack } from './smufl';\n\nconst Flow = {\n STEM_WIDTH: 1.5,\n STEM_HEIGHT: 35,\n STAVE_LINE_THICKNESS: 1,\n RESOLUTION: 16384,\n\n DEFAULT_FONT_STACK: DefaultFontStack,\n DEFAULT_NOTATION_FONT_SCALE: 39,\n DEFAULT_TABLATURE_FONT_SCALE: 39,\n SLASH_NOTEHEAD_WIDTH: 15,\n\n // HACK:\n // Since text origins are positioned at the baseline, we must\n // compensate for the ascender of the text. Of course, 1 staff space is\n // a very poor approximation.\n //\n // This will be deprecated in the future. This is a temporary solution until\n // we have more robust text metrics.\n TEXT_HEIGHT_OFFSET_HACK: 1,\n\n /* Kerning (DEPRECATED) */\n IsKerned: true,\n};\n\n\nFlow.clefProperties = clef => {\n if (!clef) throw new Vex.RERR('BadArgument', 'Invalid clef: ' + clef);\n\n const props = Flow.clefProperties.values[clef];\n if (!props) throw new Vex.RERR('BadArgument', 'Invalid clef: ' + clef);\n\n return props;\n};\n\nFlow.clefProperties.values = {\n 'treble': { line_shift: 0 },\n 'bass': { line_shift: 6 },\n 'tenor': { line_shift: 4 },\n 'alto': { line_shift: 3 },\n 'soprano': { line_shift: 1 },\n 'percussion': { line_shift: 0 },\n 'mezzo-soprano': { line_shift: 2 },\n 'baritone-c': { line_shift: 5 },\n 'baritone-f': { line_shift: 5 },\n 'subbass': { line_shift: 7 },\n 'french': { line_shift: -1 },\n};\n\n/*\n Take a note in the format \"Key/Octave\" (e.g., \"C/5\") and return properties.\n\n The last argument, params, is a struct the currently can contain one option,\n octave_shift for clef ottavation (0 = default; 1 = 8va; -1 = 8vb, etc.).\n*/\nFlow.keyProperties = (key, clef, params) => {\n if (clef === undefined) {\n clef = 'treble';\n }\n\n const options = { octave_shift: 0 };\n\n if (typeof params === 'object') {\n Vex.Merge(options, params);\n }\n\n const pieces = key.split('/');\n\n if (pieces.length < 2) {\n throw new Vex.RERR('BadArguments', `Key must have note + octave and an optional glyph: ${key}`);\n }\n\n const k = pieces[0].toUpperCase();\n const value = Flow.keyProperties.note_values[k];\n if (!value) throw new Vex.RERR('BadArguments', 'Invalid key name: ' + k);\n if (value.octave) pieces[1] = value.octave;\n\n let octave = parseInt(pieces[1], 10);\n\n // Octave_shift is the shift to compensate for clef 8va/8vb.\n octave += -1 * options.octave_shift;\n\n const base_index = (octave * 7) - (4 * 7);\n let line = (base_index + value.index) / 2;\n line += Flow.clefProperties(clef).line_shift;\n\n let stroke = 0;\n\n if (line <= 0 && (((line * 2) % 2) === 0)) stroke = 1; // stroke up\n if (line >= 6 && (((line * 2) % 2) === 0)) stroke = -1; // stroke down\n\n // Integer value for note arithmetic.\n const int_value = typeof (value.int_val) !== 'undefined'\n ? (octave * 12) + value.int_val\n : null;\n\n /* Check if the user specified a glyph. */\n const code = value.code;\n const shift_right = value.shift_right;\n let extraProps = {};\n if (pieces.length > 2 && pieces[2]) {\n const glyph_name = pieces[2].toUpperCase();\n extraProps = Flow.keyProperties.customNoteHeads[glyph_name] || {};\n }\n\n return {\n key: k,\n octave,\n line,\n int_value,\n accidental: value.accidental,\n code,\n stroke,\n shift_right,\n displaced: false,\n ...extraProps,\n };\n};\n\nFlow.keyProperties.note_values = {\n 'C': { index: 0, int_val: 0, accidental: null },\n 'CN': { index: 0, int_val: 0, accidental: 'n' },\n 'C#': { index: 0, int_val: 1, accidental: '#' },\n 'C##': { index: 0, int_val: 2, accidental: '##' },\n 'CB': { index: 0, int_val: -1, accidental: 'b' },\n 'CBB': { index: 0, int_val: -2, accidental: 'bb' },\n 'D': { index: 1, int_val: 2, accidental: null },\n 'DN': { index: 1, int_val: 2, accidental: 'n' },\n 'D#': { index: 1, int_val: 3, accidental: '#' },\n 'D##': { index: 1, int_val: 4, accidental: '##' },\n 'DB': { index: 1, int_val: 1, accidental: 'b' },\n 'DBB': { index: 1, int_val: 0, accidental: 'bb' },\n 'E': { index: 2, int_val: 4, accidental: null },\n 'EN': { index: 2, int_val: 4, accidental: 'n' },\n 'E#': { index: 2, int_val: 5, accidental: '#' },\n 'E##': { index: 2, int_val: 6, accidental: '##' },\n 'EB': { index: 2, int_val: 3, accidental: 'b' },\n 'EBB': { index: 2, int_val: 2, accidental: 'bb' },\n 'F': { index: 3, int_val: 5, accidental: null },\n 'FN': { index: 3, int_val: 5, accidental: 'n' },\n 'F#': { index: 3, int_val: 6, accidental: '#' },\n 'F##': { index: 3, int_val: 7, accidental: '##' },\n 'FB': { index: 3, int_val: 4, accidental: 'b' },\n 'FBB': { index: 3, int_val: 3, accidental: 'bb' },\n 'G': { index: 4, int_val: 7, accidental: null },\n 'GN': { index: 4, int_val: 7, accidental: 'n' },\n 'G#': { index: 4, int_val: 8, accidental: '#' },\n 'G##': { index: 4, int_val: 9, accidental: '##' },\n 'GB': { index: 4, int_val: 6, accidental: 'b' },\n 'GBB': { index: 4, int_val: 5, accidental: 'bb' },\n 'A': { index: 5, int_val: 9, accidental: null },\n 'AN': { index: 5, int_val: 9, accidental: 'n' },\n 'A#': { index: 5, int_val: 10, accidental: '#' },\n 'A##': { index: 5, int_val: 11, accidental: '##' },\n 'AB': { index: 5, int_val: 8, accidental: 'b' },\n 'ABB': { index: 5, int_val: 7, accidental: 'bb' },\n 'B': { index: 6, int_val: 11, accidental: null },\n 'BN': { index: 6, int_val: 11, accidental: 'n' },\n 'B#': { index: 6, int_val: 12, accidental: '#' },\n 'B##': { index: 6, int_val: 13, accidental: '##' },\n 'BB': { index: 6, int_val: 10, accidental: 'b' },\n 'BBB': { index: 6, int_val: 9, accidental: 'bb' },\n 'R': { index: 6, int_val: 9, rest: true }, // Rest\n 'X': {\n index: 6,\n accidental: '',\n octave: 4,\n code: 'noteheadXBlack',\n shift_right: 5.5,\n },\n};\n\n\nFlow.integerToNote = integer => {\n if (typeof (integer) === 'undefined') {\n throw new Vex.RERR('BadArguments', 'Undefined integer for integerToNote');\n }\n\n if (integer < -2) {\n throw new Vex.RERR('BadArguments', `integerToNote requires integer > -2: ${integer}`);\n }\n\n const noteValue = Flow.integerToNote.table[integer];\n if (!noteValue) {\n throw new Vex.RERR('BadArguments', `Unknown note value for integer: ${integer}`);\n }\n\n return noteValue;\n};\n\nFlow.integerToNote.table = {\n 0: 'C',\n 1: 'C#',\n 2: 'D',\n 3: 'D#',\n 4: 'E',\n 5: 'F',\n 6: 'F#',\n 7: 'G',\n 8: 'G#',\n 9: 'A',\n 10: 'A#',\n 11: 'B',\n};\n\nFlow.tabToGlyph = (fret, scale = 1.0) => {\n let glyph = null;\n let width = 0;\n let shift_y = 0;\n\n if (fret.toString().toUpperCase() === 'X') {\n const glyphMetrics = new Glyph('accidentalDoubleSharp', Flow.DEFAULT_TABLATURE_FONT_SCALE).getMetrics();\n glyph = 'accidentalDoubleSharp';\n width = glyphMetrics.width;\n shift_y = -glyphMetrics.height / 2;\n } else {\n width = Flow.textWidth(fret.toString());\n }\n\n return {\n text: fret,\n code: glyph,\n getWidth: () => width * scale,\n shift_y,\n };\n};\n\nFlow.textWidth = text => 7 * text.toString().length;\n\nFlow.articulationCodes = artic => Flow.articulationCodes.articulations[artic];\n\nFlow.articulationCodes.articulations = {\n 'a.': { code: 'augmentationDot', between_lines: true }, // Staccato\n 'av': {\n aboveCode: 'articStaccatissimoAbove',\n belowCode: 'articStaccatissimoBelow',\n between_lines: true\n }, // Staccatissimo\n 'a>': {\n aboveCode: 'articAccentAbove',\n belowCode: 'articAccentBelow',\n between_lines: true\n }, // Accent\n 'a-': {\n aboveCode: 'articTenutoAbove',\n belowCode: 'articTenutoBelow',\n between_lines: true\n }, // Tenuto\n 'a^': {\n aboveCode: 'articMarcatoAbove',\n belowCode: 'articMarcatoBelow',\n between_lines: false\n }, // Marcato\n 'a+': { code: 'pluckedLeftHandPizzicato', between_lines: false }, // Left hand pizzicato\n 'ao': {\n aboveCode: 'pluckedSnapPizzicatoAbove',\n belowCode: 'pluckedSnapPizzicatoBelow',\n between_lines: false\n }, // Snap pizzicato\n 'ah': { code: 'stringsHarmonic', between_lines: false }, // Natural harmonic or open note\n 'a@': { aboveCode: 'fermataAbove', belowCode: 'fermataBelow', between_lines: false }, // Fermata\n 'a@a': { code: 'fermataAbove', between_lines: false }, // Fermata above staff\n 'a@u': { code: 'fermataBelow', between_lines: false }, // Fermata below staff\n 'a|': { code: 'stringsUpBow', between_lines: false }, // Bow up - up stroke\n 'am': { code: 'stringsDownBow', between_lines: false }, // Bow down - down stroke\n 'a,': { code: 'pictChokeCymbal', between_lines: false }, // Choked\n};\n\nFlow.accidentalCodes = acc => Flow.accidentalCodes.accidentals[acc];\n\nFlow.accidentalCodes.accidentals = {\n '#': { code: 'accidentalSharp', parenRightPaddingAdjustment: -1 },\n '##': { code: 'accidentalDoubleSharp', parenRightPaddingAdjustment: -1 },\n 'b': { code: 'accidentalFlat', parenRightPaddingAdjustment: -2 },\n 'bb': { code: 'accidentalDoubleFlat', parenRightPaddingAdjustment: -2 },\n 'n': { code: 'accidentalNatural', parenRightPaddingAdjustment: -1 },\n '{': { code: 'accidentalParensLeft', parenRightPaddingAdjustment: -1 },\n '}': { code: 'accidentalParensRight', parenRightPaddingAdjustment: -1 },\n 'db': { code: 'accidentalThreeQuarterTonesFlatZimmermann', parenRightPaddingAdjustment: -1 },\n 'd': { code: 'accidentalQuarterToneFlatStein', parenRightPaddingAdjustment: 0 },\n '++': { code: 'accidentalThreeQuarterTonesSharpStein', parenRightPaddingAdjustment: -1 },\n '+': { code: 'accidentalQuarterToneSharpStein', parenRightPaddingAdjustment: -1 },\n '+-': { code: 'accidentalKucukMucennebSharp', parenRightPaddingAdjustment: -1 },\n 'bs': { code: 'accidentalBakiyeFlat', parenRightPaddingAdjustment: -1 },\n 'bss': { code: 'accidentalBuyukMucennebFlat', parenRightPaddingAdjustment: -1 },\n 'o': { code: 'accidentalSori', parenRightPaddingAdjustment: -1 },\n 'k': { code: 'accidentalKoron', parenRightPaddingAdjustment: -1 },\n 'bbs': { code: 'vexAccidentalMicrotonal1', parenRightPaddingAdjustment: -1 },\n '++-': { code: 'vexAccidentalMicrotonal2', parenRightPaddingAdjustment: -1 },\n 'ashs': { code: 'vexAccidentalMicrotonal3', parenRightPaddingAdjustment: -1 },\n 'afhf': { code: 'vexAccidentalMicrotonal4', parenRightPaddingAdjustment: -1 },\n};\n\nFlow.accidentalColumnsTable = {\n 1: {\n a: [1],\n b: [1],\n },\n 2: {\n a: [1, 2],\n },\n 3: {\n a: [1, 3, 2],\n b: [1, 2, 1],\n second_on_bottom: [1, 2, 3],\n },\n 4: {\n a: [1, 3, 4, 2],\n b: [1, 2, 3, 1],\n spaced_out_tetrachord: [1, 2, 1, 2],\n },\n 5: {\n a: [1, 3, 5, 4, 2],\n b: [1, 2, 4, 3, 1],\n spaced_out_pentachord: [1, 2, 3, 2, 1],\n very_spaced_out_pentachord: [1, 2, 1, 2, 1],\n },\n 6: {\n a: [1, 3, 5, 6, 4, 2],\n b: [1, 2, 4, 5, 3, 1],\n spaced_out_hexachord: [1, 3, 2, 1, 3, 2],\n very_spaced_out_hexachord: [1, 2, 1, 2, 1, 2],\n },\n};\n\nFlow.ornamentCodes = acc => Flow.ornamentCodes.ornaments[acc];\n\nFlow.ornamentCodes.ornaments = {\n 'mordent': { code: 'ornamentShortTrill' },\n 'mordent_inverted': { code: 'ornamentMordent' },\n 'turn': { code: 'ornamentTurn' },\n 'turn_inverted': { code: 'ornamentTurnSlash' },\n 'tr': { code: 'ornamentTrill' },\n 'upprall': { code: 'ornamentPrecompSlideTrillDAnglebert' },\n 'downprall': { code: 'ornamentPrecompDoubleCadenceUpperPrefix' },\n 'prallup': { code: 'ornamentPrecompTrillSuffixDandrieu' },\n 'pralldown': { code: 'ornamentPrecompTrillLowerSuffix' },\n 'upmordent': { code: 'ornamentPrecompSlideTrillBach' },\n 'downmordent': { code: 'ornamentPrecompDoubleCadenceUpperPrefixTurn' },\n 'lineprall': { code: 'ornamentPrecompAppoggTrill' },\n 'prallprall': { code: 'ornamentTremblement' },\n};\n\nFlow.keySignature = spec => {\n const keySpec = Flow.keySignature.keySpecs[spec];\n\n if (!keySpec) {\n throw new Vex.RERR('BadKeySignature', `Bad key signature spec: '${spec}'`);\n }\n\n if (!keySpec.acc) {\n return [];\n }\n\n const notes = Flow.keySignature.accidentalList(keySpec.acc);\n\n const acc_list = [];\n for (let i = 0; i < keySpec.num; ++i) {\n const line = notes[i];\n acc_list.push({ type: keySpec.acc, line });\n }\n\n return acc_list;\n};\n\nFlow.keySignature.keySpecs = {\n 'C': { acc: null, num: 0 },\n 'Am': { acc: null, num: 0 },\n 'F': { acc: 'b', num: 1 },\n 'Dm': { acc: 'b', num: 1 },\n 'Bb': { acc: 'b', num: 2 },\n 'Gm': { acc: 'b', num: 2 },\n 'Eb': { acc: 'b', num: 3 },\n 'Cm': { acc: 'b', num: 3 },\n 'Ab': { acc: 'b', num: 4 },\n 'Fm': { acc: 'b', num: 4 },\n 'Db': { acc: 'b', num: 5 },\n 'Bbm': { acc: 'b', num: 5 },\n 'Gb': { acc: 'b', num: 6 },\n 'Ebm': { acc: 'b', num: 6 },\n 'Cb': { acc: 'b', num: 7 },\n 'Abm': { acc: 'b', num: 7 },\n 'G': { acc: '#', num: 1 },\n 'Em': { acc: '#', num: 1 },\n 'D': { acc: '#', num: 2 },\n 'Bm': { acc: '#', num: 2 },\n 'A': { acc: '#', num: 3 },\n 'F#m': { acc: '#', num: 3 },\n 'E': { acc: '#', num: 4 },\n 'C#m': { acc: '#', num: 4 },\n 'B': { acc: '#', num: 5 },\n 'G#m': { acc: '#', num: 5 },\n 'F#': { acc: '#', num: 6 },\n 'D#m': { acc: '#', num: 6 },\n 'C#': { acc: '#', num: 7 },\n 'A#m': { acc: '#', num: 7 },\n};\n\nFlow.unicode = {\n // Unicode accidentals\n 'sharp': String.fromCharCode(parseInt('266F', 16)),\n 'flat': String.fromCharCode(parseInt('266D', 16)),\n 'natural': String.fromCharCode(parseInt('266E', 16)),\n // Major Chord\n 'triangle': String.fromCharCode(parseInt('25B3', 16)),\n // half-diminished\n 'o-with-slash': String.fromCharCode(parseInt('00F8', 16)),\n // Diminished\n 'degrees': String.fromCharCode(parseInt('00B0', 16)),\n 'circle': String.fromCharCode(parseInt('25CB', 16)),\n};\n\nFlow.keySignature.accidentalList = (acc) => {\n const patterns = {\n 'b': [2, 0.5, 2.5, 1, 3, 1.5, 3.5],\n '#': [0, 1.5, -0.5, 1, 2.5, 0.5, 2],\n };\n\n return patterns[acc];\n};\n\n\n// Used to convert duration aliases to the number based duration.\n// If the input isn't an alias, simply return the input.\n//\n// example: 'q' -> '4', '8' -> '8'\nFlow.sanitizeDuration = duration => {\n const alias = Flow.durationAliases[duration];\n if (alias !== undefined) {\n duration = alias;\n }\n\n if (Flow.durationToTicks.durations[duration] === undefined) {\n throw new Vex.RERR('BadArguments', `The provided duration is not valid: ${duration}`);\n }\n\n return duration;\n};\n\n// Convert the `duration` to an fraction\nFlow.durationToFraction = duration => new Fraction().parse(Flow.sanitizeDuration(duration));\n\n// Convert the `duration` to an number\nFlow.durationToNumber = duration => Flow.durationToFraction(duration).value();\n\n// Convert the `duration` to total ticks\nFlow.durationToTicks = duration => {\n duration = Flow.sanitizeDuration(duration);\n\n const ticks = Flow.durationToTicks.durations[duration];\n if (ticks === undefined) {\n return null;\n }\n\n return ticks;\n};\n\nFlow.durationToTicks.durations = {\n '1/2': Flow.RESOLUTION * 2,\n '1': Flow.RESOLUTION / 1,\n '2': Flow.RESOLUTION / 2,\n '4': Flow.RESOLUTION / 4,\n '8': Flow.RESOLUTION / 8,\n '16': Flow.RESOLUTION / 16,\n '32': Flow.RESOLUTION / 32,\n '64': Flow.RESOLUTION / 64,\n '128': Flow.RESOLUTION / 128,\n '256': Flow.RESOLUTION / 256,\n};\n\nFlow.durationAliases = {\n 'w': '1',\n 'h': '2',\n 'q': '4',\n\n // This is the default duration used to render bars (BarNote). Bars no longer\n // consume ticks, so this should be a no-op.\n //\n // TODO(0xfe): This needs to be cleaned up.\n 'b': '256',\n};\n\n// Return a glyph given duration and type. The type can be a custom glyph code from customNoteHeads.\nFlow.getGlyphProps = (duration, type) => {\n duration = Flow.sanitizeDuration(duration);\n type = type || 'n'; // default type is a regular note\n\n // Lookup duration for default glyph head code\n const code = Flow.getGlyphProps.duration_codes[duration];\n if (code === undefined) { return null; }\n\n // Get glyph properties for 'type' from duration string (note, rest, harmonic, muted, slash)\n let glyphTypeProperties = code.type[type];\n\n // If this isn't a standard type, then lookup the custom note head map.\n if (glyphTypeProperties === undefined) {\n // Try and get it from the custom list of note heads\n const customGlyphTypeProperties = Flow.keyProperties.customNoteHeads[type.toUpperCase()];\n\n // If not, then return with nothing\n if (customGlyphTypeProperties === undefined) { return null; }\n\n // Otherwise set it as the code_head value\n glyphTypeProperties = {\n code_head: customGlyphTypeProperties.code,\n ...customGlyphTypeProperties,\n };\n }\n\n // Merge duration props for 'duration' with the note head properties.\n return { ...code.common, ...glyphTypeProperties };\n};\n\nFlow.getGlyphProps.validTypes = {\n 'n': { name: 'note' },\n 'r': { name: 'rest' },\n 'h': { name: 'harmonic' },\n 'm': { name: 'muted' },\n 's': { name: 'slash' },\n};\n\n// Custom note heads\nFlow.keyProperties.customNoteHeads = {\n /* Diamond */\n 'D0': { code: 'noteheadDiamondWhole', },\n 'D1': { code: 'noteheadDiamondHalf' },\n 'D2': { code: 'noteheadDiamondBlack' },\n 'D3': { code: 'noteheadDiamondBlack' },\n\n /* Triangle */\n 'T0': { code: 'noteheadTriangleUpWhole' },\n 'T1': { code: 'noteheadTriangleUpHalf' },\n 'T2': { code: 'noteheadTriangleUpBlack' },\n 'T3': { code: 'noteheadTriangleUpBlack' },\n\n /* Cross */\n 'X0': { code: 'noteheadXWhole', },\n 'X1': { code: 'noteheadXHalf' },\n 'X2': { code: 'noteheadXBlack' },\n 'X3': { code: 'noteheadCircleX' },\n\n /* Square */\n 'S1': { code: 'noteheadSquareWhite' },\n 'S2': { code: 'noteheadSquareBlack' },\n\n /* Rectangle */\n 'R1': { code: 'vexNoteHeadRectWhite' }, // no smufl code\n 'R2': { code: 'vexNoteHeadRectBlack' }, // no smufl code\n};\n\nFlow.getGlyphProps.duration_codes = {\n '1/2': {\n common: {\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'v53', scale).getMetrics().width;\n },\n stem: false,\n stem_offset: 0,\n flag: false,\n stem_up_extension: -Flow.STEM_HEIGHT,\n stem_down_extension: -Flow.STEM_HEIGHT,\n tabnote_stem_up_extension: -Flow.STEM_HEIGHT,\n tabnote_stem_down_extension: -Flow.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Breve note\n code_head: 'noteheadDoubleWhole',\n },\n 'h': { // Breve note harmonic\n code_head: 'unpitchedPercussionClef1',\n },\n 'm': { // Breve note muted -\n code_head: 'vexNoteHeadMutedBreve',\n stem_offset: 0,\n },\n 'r': { // Breve rest\n code_head: 'restDoubleWhole',\n rest: true,\n position: 'B/5',\n dot_shiftY: 0.5,\n },\n 's': { // Breve note slash -\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '1': {\n common: {\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'v1d', scale).getMetrics().width;\n },\n stem: false,\n stem_offset: 0,\n flag: false,\n stem_up_extension: -Flow.STEM_HEIGHT,\n stem_down_extension: -Flow.STEM_HEIGHT,\n tabnote_stem_up_extension: -Flow.STEM_HEIGHT,\n tabnote_stem_down_extension: -Flow.STEM_HEIGHT,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Whole note\n code_head: 'noteheadWhole',\n },\n 'h': { // Whole note harmonic\n code_head: 'noteheadDiamondWhole',\n },\n 'm': { // Whole note muted\n code_head: 'noteheadXWhole',\n stem_offset: -3,\n },\n 'r': { // Whole rest\n code_head: 'restWhole',\n rest: true,\n position: 'D/5',\n dot_shiftY: 0.5,\n },\n 's': { // Whole note slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '2': {\n common: {\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadHalf', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Half note\n code_head: 'noteheadHalf',\n },\n 'h': { // Half note harmonic\n code_head: 'noteheadDiamondHalf',\n },\n 'm': { // Half note muted\n code_head: 'noteheadXHalf',\n stem_offset: -3,\n },\n 'r': { // Half rest\n code_head: 'restHalf',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n },\n 's': { // Half note slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '4': {\n common: {\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadBlack', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: false,\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Quarter note\n code_head: 'noteheadBlack',\n },\n 'h': { // Quarter harmonic\n code_head: 'noteheadDiamondBlack',\n },\n 'm': { // Quarter muted\n code_head: 'noteheadXBlack',\n },\n 'r': { // Quarter rest\n code_head: 'restQuarter',\n stem: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.5,\n line_below: 1.5,\n },\n 's': { // Quarter slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '8': {\n common: {\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadBlack', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: true,\n beam_count: 1,\n code_flag_upstem: 'flag8thUp',\n code_flag_downstem: 'flag8thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Eighth note\n code_head: 'noteheadBlack',\n },\n 'h': { // Eighth note harmonic\n code_head: 'noteheadDiamondBlack',\n },\n 'm': { // Eighth note muted\n code_head: 'noteheadXBlack',\n },\n 'r': { // Eighth rest\n code_head: 'rest8th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 1.0,\n },\n 's': { // Eight slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '16': {\n common: {\n beam_count: 2,\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadBlack', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: true,\n code_flag_upstem: 'flag16thUp',\n code_flag_downstem: 'flag16thDown',\n stem_up_extension: 0,\n stem_down_extension: 0,\n tabnote_stem_up_extension: 0,\n tabnote_stem_down_extension: 0,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Sixteenth note\n code_head: 'noteheadBlack',\n },\n 'h': { // Sixteenth note harmonic\n code_head: 'noteheadDiamondBlack',\n },\n 'm': { // Sixteenth note muted\n code_head: 'noteheadXBlack',\n },\n 'r': { // Sixteenth rest\n code_head: 'rest16th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -0.5,\n line_above: 1.0,\n line_below: 2.0,\n },\n 's': { // Sixteenth slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '32': {\n common: {\n beam_count: 3,\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadBlack', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: true,\n code_flag_upstem: 'flag32ndUp',\n code_flag_downstem: 'flag32ndDown',\n stem_up_extension: 9,\n stem_down_extension: 9,\n tabnote_stem_up_extension: 8,\n tabnote_stem_down_extension: 5,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Thirty-second note\n code_head: 'noteheadBlack',\n },\n 'h': { // Thirty-second harmonic\n code_head: 'noteheadDiamondBlack',\n },\n 'm': { // Thirty-second muted\n code_head: 'noteheadXBlack',\n },\n 'r': { // Thirty-second rest\n code_head: 'rest32nd',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 2.0,\n },\n 's': { // Thirty-second slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '64': {\n common: {\n beam_count: 4,\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadBlack', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: true,\n code_flag_upstem: 'flag64thUp',\n code_flag_downstem: 'flag64thDown',\n stem_up_extension: 13,\n stem_down_extension: 13,\n tabnote_stem_up_extension: 12,\n tabnote_stem_down_extension: 9,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Sixty-fourth note\n code_head: 'noteheadBlack',\n },\n 'h': { // Sixty-fourth harmonic\n code_head: 'noteheadDiamondBlack',\n },\n 'm': { // Sixty-fourth muted\n code_head: 'noteheadXBlack',\n },\n 'r': { // Sixty-fourth rest\n code_head: 'rest64th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: -1.5,\n line_above: 2.0,\n line_below: 3.0,\n },\n 's': { // Sixty-fourth slash\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n '128': {\n common: {\n beam_count: 5,\n getWidth(scale = Flow.DEFAULT_NOTATION_FONT_SCALE) {\n return new Glyph(this.code_head || 'noteheadBlack', scale).getMetrics().width;\n },\n stem: true,\n stem_offset: 0,\n flag: true,\n code_flag_upstem: 'flag128thUp',\n code_flag_downstem: 'flag128thDown',\n stem_up_extension: 22,\n stem_down_extension: 22,\n tabnote_stem_up_extension: 21,\n tabnote_stem_down_extension: 18,\n dot_shiftY: 0,\n line_above: 0,\n line_below: 0,\n },\n type: {\n 'n': { // Hundred-twenty-eight note\n code_head: 'noteheadBlack',\n },\n 'h': { // Hundred-twenty-eight harmonic\n code_head: 'noteheadDiamondBlack',\n },\n 'm': { // Hundred-twenty-eight muted\n code_head: 'noteheadXBlack',\n },\n 'r': { // Hundred-twenty-eight rest\n code_head: 'rest128th',\n stem: false,\n flag: false,\n rest: true,\n position: 'B/4',\n dot_shiftY: 1.5,\n line_above: 3.0,\n line_below: 3.0,\n },\n 's': { // Hundred-twenty-eight rest\n // Drawn with canvas primitives\n getWidth: () => Flow.SLASH_NOTEHEAD_WIDTH,\n position: 'B/4',\n },\n },\n },\n};\n\n// Some defaults\nFlow.TIME4_4 = {\n num_beats: 4,\n beat_value: 4,\n resolution: Flow.RESOLUTION,\n};\nexport { Flow };\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Mohit Muthanna \n//\n// A rendering context for the Raphael backend.\n//\n// Copyright Mohit Cheppudira 2010\n\nimport { Vex } from './vex';\n\n/** @constructor */\nexport class CanvasContext {\n static get WIDTH() {\n return 600;\n }\n static get HEIGHT() {\n return 400;\n }\n static get CANVAS_BROWSER_SIZE_LIMIT() {\n return 32767; // Chrome/Firefox. Could be determined more precisely by npm module canvas-size\n }\n\n static SanitizeCanvasDims(width, height) {\n if (Math.max(width, height) > this.CANVAS_BROWSER_SIZE_LIMIT) {\n Vex.W(\n 'Canvas dimensions exceed browser limit. Cropping to ' +\n this.CANVAS_BROWSER_SIZE_LIMIT\n );\n if (width > this.CANVAS_BROWSER_SIZE_LIMIT) {\n width = this.CANVAS_BROWSER_SIZE_LIMIT;\n // note: Math.min return 0 for undefined, NaN for null. Would change inputs.\n }\n if (height > this.CANVAS_BROWSER_SIZE_LIMIT) {\n height = this.CANVAS_BROWSER_SIZE_LIMIT;\n }\n }\n return [width, height];\n }\n\n constructor(context) {\n // Use a name that is unlikely to clash with a canvas context\n // property\n this.vexFlowCanvasContext = context;\n if (!context.canvas) {\n this.canvas = {\n width: CanvasContext.WIDTH,\n height: CanvasContext.HEIGHT,\n };\n } else {\n this.canvas = context.canvas;\n }\n }\n\n clear() {\n this.vexFlowCanvasContext.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n\n // Containers not implemented\n openGroup() {}\n closeGroup() {}\n add() {}\n\n setFont(family, size, weight) {\n this.vexFlowCanvasContext.font = (weight || '') + ' ' + size + 'pt ' + family;\n return this;\n }\n\n setRawFont(font) {\n this.vexFlowCanvasContext.font = font;\n return this;\n }\n\n setFillStyle(style) {\n this.vexFlowCanvasContext.fillStyle = style;\n return this;\n }\n\n setBackgroundFillStyle(style) {\n this.background_fillStyle = style;\n return this;\n }\n\n setStrokeStyle(style) {\n this.vexFlowCanvasContext.strokeStyle = style;\n return this;\n }\n\n setShadowColor(style) {\n this.vexFlowCanvasContext.shadowColor = style;\n return this;\n }\n\n setShadowBlur(blur) {\n this.vexFlowCanvasContext.shadowBlur = blur;\n return this;\n }\n\n setLineWidth(width) {\n this.vexFlowCanvasContext.lineWidth = width;\n return this;\n }\n\n setLineCap(cap_type) {\n this.vexFlowCanvasContext.lineCap = cap_type;\n return this;\n }\n\n // setLineDash: is the one native method in a canvas context\n // that begins with set, therefore we don't bolster the method\n // if it already exists (see renderer.bolsterCanvasContext).\n // If it doesn't exist, we bolster it and assume it's looking for\n // a ctx.lineDash method, as previous versions of VexFlow\n // expected.\n setLineDash(dash) {\n this.vexFlowCanvasContext.lineDash = dash;\n return this;\n }\n\n scale(x, y) {\n return this.vexFlowCanvasContext.scale(parseFloat(x), parseFloat(y));\n }\n\n resize(width, height) {\n [width, height] = this.SanitizeCanvasDims(parseInt(width, 10), parseInt(height, 10));\n return this.vexFlowCanvasContext.resize(width, height);\n }\n\n rect(x, y, width, height) {\n return this.vexFlowCanvasContext.rect(x, y, width, height);\n }\n\n fillRect(x, y, width, height) {\n return this.vexFlowCanvasContext.fillRect(x, y, width, height);\n }\n\n clearRect(x, y, width, height) {\n return this.vexFlowCanvasContext.clearRect(x, y, width, height);\n }\n\n beginPath() {\n return this.vexFlowCanvasContext.beginPath();\n }\n\n moveTo(x, y) {\n return this.vexFlowCanvasContext.moveTo(x, y);\n }\n\n lineTo(x, y) {\n return this.vexFlowCanvasContext.lineTo(x, y);\n }\n\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n return this.vexFlowCanvasContext.bezierCurveTo(x1, y1, x2, y2, x, y);\n }\n\n quadraticCurveTo(x1, y1, x, y) {\n return this.vexFlowCanvasContext.quadraticCurveTo(x1, y1, x, y);\n }\n\n // This is an attempt (hack) to simulate the HTML5 canvas\n // arc method.\n arc(x, y, radius, startAngle, endAngle, antiClockwise) {\n return this.vexFlowCanvasContext.arc(x, y, radius, startAngle, endAngle, antiClockwise);\n }\n\n // Adapted from the source for Raphael's Element.glow\n glow() {\n return this.vexFlowCanvasContext.glow();\n }\n\n fill() {\n return this.vexFlowCanvasContext.fill();\n }\n\n stroke() {\n return this.vexFlowCanvasContext.stroke();\n }\n\n closePath() {\n return this.vexFlowCanvasContext.closePath();\n }\n\n measureText(text) {\n return this.vexFlowCanvasContext.measureText(text);\n }\n\n fillText(text, x, y) {\n return this.vexFlowCanvasContext.fillText(text, x, y);\n }\n\n save() {\n return this.vexFlowCanvasContext.save();\n }\n\n restore() {\n return this.vexFlowCanvasContext.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A rendering context for the Raphael backend.\n//\n// ## Warning: Deprecated for SVGContext\n// Except in instances where SVG support for IE < 9.0 is\n// needed, SVGContext is recommended.\n\nexport class RaphaelContext {\n constructor(element) {\n this.element = element;\n this.paper = Raphael(element); // eslint-disable-line\n this.path = '';\n this.pen = { x: 0, y: 0 };\n this.lineWidth = 1.0;\n this.state = {\n scale: { x: 1, y: 1 },\n font_family: 'Arial',\n font_size: 8,\n font_weight: 800,\n };\n\n this.attributes = {\n 'stroke-width': 0.3,\n 'fill': 'black',\n 'stroke': 'black',\n 'font': '10pt Arial',\n };\n\n this.background_attributes = {\n 'stroke-width': 0,\n 'fill': 'white',\n 'stroke': 'white',\n 'font': '10pt Arial',\n };\n\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n\n this.state_stack = [];\n }\n\n // Containers not implemented\n openGroup() {}\n closeGroup() {}\n add() {}\n\n setFont(family, size, weight) {\n this.state.font_family = family;\n this.state.font_size = size;\n this.state.font_weight = weight;\n this.attributes.font = (this.state.font_weight || '') + ' ' +\n (this.state.font_size * this.state.scale.x) + 'pt ' +\n this.state.font_family;\n return this;\n }\n\n setRawFont(font) {\n this.attributes.font = font;\n return this;\n }\n\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n\n setBackgroundFillStyle(style) {\n this.background_attributes.fill = style;\n this.background_attributes.stroke = style;\n return this;\n }\n\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n\n setShadowColor(style) {\n this.shadow_attributes.color = style;\n return this;\n }\n\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n }\n\n // Empty because there is no equivalent in SVG\n setLineDash() { return this; }\n setLineCap() { return this; }\n\n scale(x, y) {\n this.state.scale = { x, y };\n // The scale() method is deprecated as of Raphael.JS 2.0, and\n // can no longer be used as an option in an Element.attr() call.\n // It is preserved here for users running earlier versions of\n // Raphael.JS, though it has no effect on the SVG output in\n // Raphael 2 and higher.\n this.attributes.transform = 'S' + x + ',' + y + ',0,0';\n this.attributes.scale = x + ',' + y + ',0,0';\n this.attributes.font = this.state.font_size * this.state.scale.x + 'pt ' +\n this.state.font_family;\n this.background_attributes.transform = 'S' + x + ',' + y + ',0,0';\n this.background_attributes.font = this.state.font_size *\n this.state.scale.x + 'pt ' +\n this.state.font_family;\n return this;\n }\n\n clear() { this.paper.clear(); }\n\n resize(width, height) {\n this.element.style.width = width;\n this.paper.setSize(width, height);\n return this;\n }\n\n // Sets the SVG `viewBox` property, which results in auto scaling images when its container\n // is resized.\n //\n // Usage: `ctx.setViewBox(\"0 0 600 400\")`\n setViewBox(viewBox) {\n this.paper.canvas.setAttribute('viewBox', viewBox);\n }\n\n rect(x, y, width, height) {\n if (height < 0) {\n y += height;\n height = -height;\n }\n\n this.paper.rect(x, y, width - 0.5, height - 0.5)\n .attr(this.attributes)\n .attr('fill', 'none')\n .attr('stroke-width', this.lineWidth);\n return this;\n }\n\n fillRect(x, y, width, height) {\n if (height < 0) {\n y += height;\n height = -height;\n }\n\n this.paper.rect(x, y, width - 0.5, height - 0.5).attr(this.attributes);\n return this;\n }\n\n clearRect(x, y, width, height) {\n if (height < 0) {\n y += height;\n height = -height;\n }\n\n this.paper.rect(x, y, width - 0.5, height - 0.5)\n .attr(this.background_attributes);\n return this;\n }\n\n beginPath() {\n this.path = '';\n this.pen.x = 0;\n this.pen.y = 0;\n return this;\n }\n\n moveTo(x, y) {\n this.path += 'M' + x + ',' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n lineTo(x, y) {\n this.path += 'L' + x + ',' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this.path += 'C' +\n x1 + ',' +\n y1 + ',' +\n x2 + ',' +\n y2 + ',' +\n x + ',' +\n y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n quadraticCurveTo(x1, y1, x, y) {\n this.path += 'Q' +\n x1 + ',' +\n y1 + ',' +\n x + ',' +\n y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n // This is an attempt (hack) to simulate the HTML5 canvas\n // arc method.\n arc(x, y, radius, startAngle, endAngle, antiClockwise) {\n function normalizeAngle(angle) {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n\n while (angle > Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n }\n\n startAngle = normalizeAngle(startAngle);\n endAngle = normalizeAngle(endAngle);\n\n if (startAngle > endAngle) {\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n antiClockwise = !antiClockwise;\n }\n\n const delta = endAngle - startAngle;\n\n if (delta > Math.PI) {\n this.arcHelper(x, y, radius, startAngle, startAngle + delta / 2, antiClockwise);\n this.arcHelper(x, y, radius, startAngle + delta / 2, endAngle, antiClockwise);\n } else {\n this.arcHelper(x, y, radius, startAngle, endAngle, antiClockwise);\n }\n return this;\n }\n\n arcHelper(x, y, radius, startAngle, endAngle, antiClockwise) {\n const x1 = x + radius * Math.cos(startAngle);\n const y1 = y + radius * Math.sin(startAngle);\n\n const x2 = x + radius * Math.cos(endAngle);\n const y2 = y + radius * Math.sin(endAngle);\n\n let largeArcFlag = 0;\n let sweepFlag = 0;\n if (antiClockwise) {\n sweepFlag = 1;\n if (endAngle - startAngle < Math.PI) {\n largeArcFlag = 1;\n }\n } else if (endAngle - startAngle > Math.PI) {\n largeArcFlag = 1;\n }\n\n this.path += 'M' + x1 + ',' + y1 + ',A' +\n radius + ',' + radius + ',0,' + largeArcFlag + ',' + sweepFlag + ',' +\n x2 + ',' + y2 + 'M' + this.pen.x + ',' + this.pen.y;\n }\n\n // Adapted from the source for Raphael's Element.glow\n glow() {\n const out = this.paper.set();\n if (this.shadow_attributes.width > 0) {\n const sa = this.shadow_attributes;\n const num_paths = sa.width / 2;\n for (let i = 1; i <= num_paths; i++) {\n out.push(this.paper.path(this.path).attr({\n stroke: sa.color,\n 'stroke-linejoin': 'round',\n 'stroke-linecap': 'round',\n 'stroke-width': +(sa.width / num_paths * i).toFixed(3),\n opacity: +((sa.opacity || 0.3) / num_paths).toFixed(3),\n // See note in this.scale(): In Raphael the scale() method\n // is deprecated and removed as of Raphael 2.0 and replaced\n // by the transform() method. It is preserved here for\n // users with earlier versions of Raphael, but has no effect\n // on the output SVG in Raphael 2.0+.\n transform: this.attributes.transform,\n scale: this.attributes.scale,\n }));\n }\n }\n return out;\n }\n\n fill() {\n const elem = this.paper.path(this.path)\n .attr(this.attributes)\n .attr('stroke-width', 0);\n this.glow(elem);\n return this;\n }\n\n stroke() {\n // The first line of code below is, unfortunately, a bit of a hack:\n // Raphael's transform() scaling does not scale the stroke-width, so\n // in order to scale a stroke, we have to manually scale the\n // stroke-width.\n //\n // This works well so long as the X & Y states for this.scale() are\n // relatively similar. However, if they are very different, we\n // would expect horizontal and vertical lines to have different\n // stroke-widths.\n //\n // In the future, if we want to support very divergent values for\n // horizontal and vertical scaling, we may want to consider\n // implementing SVG scaling with properties of the SVG viewBox &\n // viewPort and removing it entirely from the Element.attr() calls.\n // This would more closely parallel the approach taken in\n // canvascontext.js as well.\n\n const strokeWidth = this.lineWidth * (this.state.scale.x + this.state.scale.y) / 2;\n const elem = this.paper.path(this.path)\n .attr(this.attributes)\n .attr('fill', 'none')\n .attr('stroke-width', strokeWidth);\n this.glow(elem);\n return this;\n }\n\n closePath() {\n this.path += 'Z';\n return this;\n }\n\n measureText(text) {\n const txt = this.paper.text(0, 0, text)\n .attr(this.attributes)\n .attr('fill', 'none')\n .attr('stroke', 'none');\n const bounds = txt.getBBox();\n txt.remove();\n\n return {\n width: bounds.width,\n height: bounds.height,\n };\n }\n\n fillText(text, x, y) {\n this.paper\n .text(\n x + (this.measureText(text).width / 2),\n y - (this.state.font_size / (2.25 * this.state.scale.y)),\n text\n )\n .attr(this.attributes);\n\n return this;\n }\n\n save() {\n // TODO(mmuthanna): State needs to be deep-copied.\n this.state_stack.push({\n state: {\n font_family: this.state.font_family,\n },\n attributes: {\n font: this.attributes.font,\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n });\n return this;\n }\n\n restore() {\n // TODO(0xfe): State needs to be deep-restored.\n const state = this.state_stack.pop();\n this.state.font_family = state.state.font_family;\n this.attributes.font = state.attributes.font;\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Gregory Ristow (2015)\n\nimport { Vex } from './vex';\n\nconst attrNamesToIgnoreMap = {\n path: {\n x: true,\n y: true,\n width: true,\n height: true,\n },\n rect: {\n },\n text: {\n width: true,\n height: true,\n },\n};\n\n{\n const fontAttrNamesToIgnore = {\n 'font-family': true,\n 'font-weight': true,\n 'font-style': true,\n 'font-size': true,\n };\n\n Vex.Merge(attrNamesToIgnoreMap.rect, fontAttrNamesToIgnore);\n Vex.Merge(attrNamesToIgnoreMap.path, fontAttrNamesToIgnore);\n}\n\nexport class SVGContext {\n constructor(element) {\n // element is the parent DOM object\n this.element = element;\n // Create the SVG in the SVG namespace:\n this.svgNS = 'http://www.w3.org/2000/svg';\n const svg = this.create('svg');\n // Add it to the canvas:\n this.element.appendChild(svg);\n\n // Point to it:\n this.svg = svg;\n this.groups = [this.svg]; // Create the group stack\n this.parent = this.svg;\n\n this.path = '';\n this.pen = { x: NaN, y: NaN };\n this.lineWidth = 1.0;\n this.state = {\n scale: { x: 1, y: 1 },\n 'font-family': 'Arial',\n 'font-size': '8pt',\n 'font-weight': 'normal',\n };\n\n this.attributes = {\n 'stroke-width': 0.3,\n 'fill': 'black',\n 'stroke': 'black',\n 'stroke-dasharray': 'none',\n 'font-family': 'Arial',\n 'font-size': '10pt',\n 'font-weight': 'normal',\n 'font-style': 'normal',\n };\n\n this.background_attributes = {\n 'stroke-width': 0,\n 'fill': 'white',\n 'stroke': 'white',\n 'stroke-dasharray': 'none',\n 'font-family': 'Arial',\n 'font-size': '10pt',\n 'font-weight': 'normal',\n 'font-style': 'normal',\n };\n\n this.shadow_attributes = {\n width: 0,\n color: 'black',\n };\n\n this.state_stack = [];\n\n // Test for Internet Explorer\n this.iePolyfill();\n }\n\n create(svgElementType) {\n return document.createElementNS(this.svgNS, svgElementType);\n }\n\n // Allow grouping elements in containers for interactivity.\n openGroup(cls, id, attrs) {\n const group = this.create('g');\n this.groups.push(group);\n this.parent.appendChild(group);\n this.parent = group;\n if (cls) group.setAttribute('class', Vex.Prefix(cls));\n if (id) group.setAttribute('id', Vex.Prefix(id));\n\n if (attrs && attrs.pointerBBox) {\n group.setAttribute('pointer-events', 'bounding-box');\n }\n return group;\n }\n\n closeGroup() {\n this.groups.pop();\n this.parent = this.groups[this.groups.length - 1];\n }\n\n add(elem) {\n this.parent.appendChild(elem);\n }\n\n // Tests if the browser is Internet Explorer; if it is,\n // we do some tricks to improve text layout. See the\n // note at ieMeasureTextFix() for details.\n iePolyfill() {\n if (typeof (navigator) !== 'undefined') {\n this.ie = (\n /MSIE 9/i.test(navigator.userAgent) ||\n /MSIE 10/i.test(navigator.userAgent) ||\n /rv:11\\.0/i.test(navigator.userAgent) ||\n /Trident/i.test(navigator.userAgent)\n );\n }\n }\n\n // ### Styling & State Methods:\n\n setFont(family, size, weight) {\n // Unlike canvas, in SVG italic is handled by font-style,\n // not weight. So: we search the weight argument and\n // apply bold and italic to weight and style respectively.\n let bold = false;\n let italic = false;\n let style = 'normal';\n // Weight might also be a number (200, 400, etc...) so we\n // test its type to be sure we have access to String methods.\n if (typeof weight === 'string') {\n // look for \"italic\" in the weight:\n if (weight.indexOf('italic') !== -1) {\n weight = weight.replace(/italic/g, '');\n italic = true;\n }\n // look for \"bold\" in weight\n if (weight.indexOf('bold') !== -1) {\n weight = weight.replace(/bold/g, '');\n bold = true;\n }\n // remove any remaining spaces\n weight = weight.replace(/ /g, '');\n }\n weight = bold ? 'bold' : weight;\n weight = (typeof weight === 'undefined' || weight === '') ? 'normal' : weight;\n\n style = italic ? 'italic' : style;\n\n const fontAttributes = {\n 'font-family': family,\n 'font-size': size + 'pt',\n 'font-weight': weight,\n 'font-style': style,\n };\n\n // Store the font size so that if the browser is Internet\n // Explorer we can fix its calculations of text width.\n this.fontSize = Number(size);\n\n Vex.Merge(this.attributes, fontAttributes);\n Vex.Merge(this.state, fontAttributes);\n\n return this;\n }\n\n setRawFont(font) {\n font = font.trim();\n // Assumes size first, splits on space -- which is presently\n // how all existing modules are calling this.\n const fontArray = font.split(' ');\n\n this.attributes['font-family'] = fontArray[1];\n this.state['font-family'] = fontArray[1];\n\n this.attributes['font-size'] = fontArray[0];\n this.state['font-size'] = fontArray[0];\n\n // Saves fontSize for IE polyfill\n this.fontSize = Number(fontArray[0].match(/\\d+/));\n return this;\n }\n\n setFillStyle(style) {\n this.attributes.fill = style;\n return this;\n }\n\n setBackgroundFillStyle(style) {\n this.background_attributes.fill = style;\n this.background_attributes.stroke = style;\n return this;\n }\n\n setStrokeStyle(style) {\n this.attributes.stroke = style;\n return this;\n }\n\n setShadowColor(style) {\n this.shadow_attributes.color = style;\n return this;\n }\n\n setShadowBlur(blur) {\n this.shadow_attributes.width = blur;\n return this;\n }\n\n setLineWidth(width) {\n this.attributes['stroke-width'] = width;\n this.lineWidth = width;\n }\n\n // @param array {lineDash} as [dashInt, spaceInt, dashInt, spaceInt, etc...]\n setLineDash(lineDash) {\n if (Object.prototype.toString.call(lineDash) === '[object Array]') {\n lineDash = lineDash.join(', ');\n this.attributes['stroke-dasharray'] = lineDash;\n return this;\n } else {\n throw new Vex.RERR('ArgumentError', 'lineDash must be an array of integers.');\n }\n }\n\n setLineCap(lineCap) {\n this.attributes['stroke-linecap'] = lineCap;\n return this;\n }\n\n // ### Sizing & Scaling Methods:\n\n // TODO (GCR): See note at scale() -- seperate our internal\n // conception of pixel-based width/height from the style.width\n // and style.height properties eventually to allow users to\n // apply responsive sizing attributes to the SVG.\n resize(width, height) {\n this.width = width;\n this.height = height;\n this.element.style.width = width;\n\n this.svg.style.width = width;\n this.svg.style.height = height;\n\n const attributes = {\n width,\n height,\n };\n\n this.applyAttributes(this.svg, attributes);\n this.scale(this.state.scale.x, this.state.scale.y);\n return this;\n }\n\n scale(x, y) {\n // uses viewBox to scale\n // TODO (GCR): we may at some point want to distinguish the\n // style.width / style.height properties that are applied to\n // the SVG object from our internal conception of the SVG\n // width/height. This would allow us to create automatically\n // scaling SVG's that filled their containers, for instance.\n //\n // As this isn't implemented in Canvas or Raphael contexts,\n // I've left as is for now, but in using the viewBox to\n // handle internal scaling, am trying to make it possible\n // for us to eventually move in that direction.\n\n this.state.scale = { x, y };\n const visibleWidth = this.width / x;\n const visibleHeight = this.height / y;\n this.setViewBox(0, 0, visibleWidth, visibleHeight);\n\n return this;\n }\n\n setViewBox(...args) {\n // Override for \"x y w h\" style:\n if (args.length === 1) {\n const [viewBox] = args;\n this.svg.setAttribute('viewBox', viewBox);\n } else {\n const [xMin, yMin, width, height] = args;\n const viewBoxString = xMin + ' ' + yMin + ' ' + width + ' ' + height;\n this.svg.setAttribute('viewBox', viewBoxString);\n }\n }\n\n // ### Drawing helper methods:\n\n applyAttributes(element, attributes) {\n const attrNamesToIgnore = attrNamesToIgnoreMap[element.nodeName];\n Object\n .keys(attributes)\n .forEach(propertyName => {\n if (attrNamesToIgnore && attrNamesToIgnore[propertyName]) {\n return;\n }\n element.setAttributeNS(null, propertyName, attributes[propertyName]);\n });\n\n return element;\n }\n\n // ### Shape & Path Methods:\n\n clear() {\n // Clear the SVG by removing all inner children.\n\n // (This approach is usually slightly more efficient\n // than removing the old SVG & adding a new one to\n // the container element, since it does not cause the\n // container to resize twice. Also, the resize\n // triggered by removing the entire SVG can trigger\n // a touchcancel event when the element resizes away\n // from a touch point.)\n\n while (this.svg.lastChild) {\n this.svg.removeChild(this.svg.lastChild);\n }\n\n // Replace the viewbox attribute we just removed:\n this.scale(this.state.scale.x, this.state.scale.y);\n }\n\n // ## Rectangles:\n\n rect(x, y, width, height, attributes) {\n // Avoid invalid negative height attribs by\n // flipping the rectangle on its head:\n if (height < 0) {\n y += height;\n height *= -1;\n }\n\n // Create the rect & style it:\n const rectangle = this.create('rect');\n if (typeof attributes === 'undefined') {\n attributes = {\n fill: 'none',\n 'stroke-width': this.lineWidth,\n stroke: 'black',\n };\n }\n\n Vex.Merge(attributes, {\n x,\n y,\n width,\n height,\n });\n\n this.applyAttributes(rectangle, attributes);\n\n this.add(rectangle);\n return this;\n }\n\n fillRect(x, y, width, height) {\n if (height < 0) {\n y += height;\n height *= -1;\n }\n\n this.rect(x, y, width, height, this.attributes);\n return this;\n }\n\n clearRect(x, y, width, height) {\n // TODO(GCR): Improve implementation of this...\n // Currently it draws a box of the background color, rather\n // than creating alpha through lower z-levels.\n //\n // See the implementation of this in SVGKit:\n // http://sourceforge.net/projects/svgkit/\n // as a starting point.\n //\n // Adding a large number of transform paths (as we would\n // have to do) could be a real performance hit. Since\n // tabNote seems to be the only module that makes use of this\n // it may be worth creating a seperate tabStave that would\n // draw lines around locations of tablature fingering.\n //\n\n this.rect(x, y, width, height, this.background_attributes);\n return this;\n }\n\n // ## Paths:\n\n beginPath() {\n this.path = '';\n this.pen.x = NaN;\n this.pen.y = NaN;\n return this;\n }\n\n moveTo(x, y) {\n this.path += 'M' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n lineTo(x, y) {\n this.path += 'L' + x + ' ' + y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this.path += 'C' +\n x1 + ' ' +\n y1 + ',' +\n x2 + ' ' +\n y2 + ',' +\n x + ' ' +\n y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n quadraticCurveTo(x1, y1, x, y) {\n this.path += 'Q' +\n x1 + ' ' +\n y1 + ',' +\n x + ' ' +\n y;\n this.pen.x = x;\n this.pen.y = y;\n return this;\n }\n\n // This is an attempt (hack) to simulate the HTML5 canvas\n // arc method.\n arc(x, y, radius, startAngle, endAngle, antiClockwise) {\n function normalizeAngle(angle) {\n while (angle < 0) {\n angle += Math.PI * 2;\n }\n\n while (angle > Math.PI * 2) {\n angle -= Math.PI * 2;\n }\n return angle;\n }\n\n startAngle = normalizeAngle(startAngle);\n endAngle = normalizeAngle(endAngle);\n\n if (startAngle > endAngle) {\n const tmp = startAngle;\n startAngle = endAngle;\n endAngle = tmp;\n antiClockwise = !antiClockwise;\n }\n\n const delta = endAngle - startAngle;\n\n if (delta > Math.PI) {\n this.arcHelper(x, y, radius, startAngle, startAngle + delta / 2, antiClockwise);\n this.arcHelper(x, y, radius, startAngle + delta / 2, endAngle, antiClockwise);\n } else {\n this.arcHelper(x, y, radius, startAngle, endAngle, antiClockwise);\n }\n return this;\n }\n\n arcHelper(x, y, radius, startAngle, endAngle, antiClockwise) {\n const x1 = x + radius * Math.cos(startAngle);\n const y1 = y + radius * Math.sin(startAngle);\n\n const x2 = x + radius * Math.cos(endAngle);\n const y2 = y + radius * Math.sin(endAngle);\n\n let largeArcFlag = 0;\n let sweepFlag = 0;\n if (antiClockwise) {\n sweepFlag = 1;\n if (endAngle - startAngle < Math.PI) {\n largeArcFlag = 1;\n }\n } else if (endAngle - startAngle > Math.PI) {\n largeArcFlag = 1;\n }\n\n this.path += 'M' + x1 + ' ' + y1 + ' A' +\n radius + ' ' + radius + ' 0 ' + largeArcFlag + ' ' + sweepFlag + ' ' +\n x2 + ' ' + y2;\n if (!isNaN(this.pen.x) && !isNaN(this.pen.y)) {\n this.peth += 'M' + this.pen.x + ' ' + this.pen.y;\n }\n }\n\n closePath() {\n this.path += 'Z';\n\n return this;\n }\n\n // Adapted from the source for Raphael's Element.glow\n glow() {\n // Calculate the width & paths of the glow:\n if (this.shadow_attributes.width > 0) {\n const sa = this.shadow_attributes;\n const num_paths = sa.width / 2;\n // Stroke at varying widths to create effect of gaussian blur:\n for (let i = 1; i <= num_paths; i++) {\n const attributes = {\n stroke: sa.color,\n 'stroke-linejoin': 'round',\n 'stroke-linecap': 'round',\n 'stroke-width': +((sa.width * 0.4) / num_paths * i).toFixed(3),\n opacity: +((sa.opacity || 0.3) / num_paths).toFixed(3),\n };\n\n const path = this.create('path');\n attributes.d = this.path;\n this.applyAttributes(path, attributes);\n this.add(path);\n }\n }\n return this;\n }\n\n fill(attributes) {\n // If our current path is set to glow, make it glow\n this.glow();\n\n const path = this.create('path');\n if (typeof attributes === 'undefined') {\n attributes = {};\n Vex.Merge(attributes, this.attributes);\n attributes.stroke = 'none';\n }\n\n attributes.d = this.path;\n\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n\n stroke() {\n // If our current path is set to glow, make it glow.\n this.glow();\n\n const path = this.create('path');\n const attributes = {};\n Vex.Merge(attributes, this.attributes);\n attributes.fill = 'none';\n attributes['stroke-width'] = this.lineWidth;\n attributes.d = this.path;\n\n this.applyAttributes(path, attributes);\n this.add(path);\n return this;\n }\n\n // ## Text Methods:\n measureText(text) {\n const txt = this.create('text');\n if (typeof (txt.getBBox) !== 'function') {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n\n txt.textContent = text;\n this.applyAttributes(txt, this.attributes);\n\n // Temporarily add it to the document for measurement.\n this.svg.appendChild(txt);\n\n let bbox = txt.getBBox();\n if (this.ie && text !== '' && this.attributes['font-style'] === 'italic') {\n bbox = this.ieMeasureTextFix(bbox, text);\n }\n\n this.svg.removeChild(txt);\n return bbox;\n }\n\n ieMeasureTextFix(bbox) {\n // Internet Explorer over-pads text in italics,\n // resulting in giant width estimates for measureText.\n // To fix this, we use this formula, tested against\n // ie 11:\n // overestimate (in pixels) = FontSize(in pt) * 1.196 + 1.96\n // And then subtract the overestimate from calculated width.\n\n const fontSize = Number(this.fontSize);\n const m = 1.196;\n const b = 1.9598;\n const widthCorrection = (m * fontSize) + b;\n const width = bbox.width - widthCorrection;\n const height = bbox.height - 1.5;\n\n // Get non-protected copy:\n const box = {\n x: bbox.x,\n y: bbox.y,\n width,\n height,\n };\n\n return box;\n }\n\n fillText(text, x, y) {\n if (!text || text.length <= 0) {\n return;\n }\n const attributes = {};\n Vex.Merge(attributes, this.attributes);\n attributes.stroke = 'none';\n attributes.x = x;\n attributes.y = y;\n\n const txt = this.create('text');\n txt.textContent = text;\n this.applyAttributes(txt, attributes);\n this.add(txt);\n }\n\n save() {\n // TODO(mmuthanna): State needs to be deep-copied.\n this.state_stack.push({\n state: {\n 'font-family': this.state['font-family'],\n 'font-weight': this.state['font-weight'],\n 'font-style': this.state['font-style'],\n 'font-size': this.state['font-size'],\n scale: this.state.scale,\n },\n attributes: {\n 'font-family': this.attributes['font-family'],\n 'font-weight': this.attributes['font-weight'],\n 'font-style': this.attributes['font-style'],\n 'font-size': this.attributes['font-size'],\n fill: this.attributes.fill,\n stroke: this.attributes.stroke,\n 'stroke-width': this.attributes['stroke-width'],\n 'stroke-dasharray': this.attributes['stroke-dasharray'],\n },\n shadow_attributes: {\n width: this.shadow_attributes.width,\n color: this.shadow_attributes.color,\n },\n lineWidth: this.lineWidth,\n });\n return this;\n }\n\n restore() {\n // TODO(0xfe): State needs to be deep-restored.\n const state = this.state_stack.pop();\n this.state['font-family'] = state.state['font-family'];\n this.state['font-weight'] = state.state['font-weight'];\n this.state['font-style'] = state.state['font-style'];\n this.state['font-size'] = state.state['font-size'];\n this.state.scale = state.state.scale;\n\n this.attributes['font-family'] = state.attributes['font-family'];\n this.attributes['font-weight'] = state.attributes['font-weight'];\n this.attributes['font-style'] = state.attributes['font-style'];\n this.attributes['font-size'] = state.attributes['font-size'];\n\n this.attributes.fill = state.attributes.fill;\n this.attributes.stroke = state.attributes.stroke;\n this.attributes['stroke-width'] = state.attributes['stroke-width'];\n this.attributes['stroke-dasharray'] = state.attributes['stroke-dasharray'];\n\n this.shadow_attributes.width = state.shadow_attributes.width;\n this.shadow_attributes.color = state.shadow_attributes.color;\n\n this.lineWidth = state.lineWidth;\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Support for different rendering contexts: Canvas, Raphael\n\nimport { CanvasContext } from './canvascontext';\nimport { RaphaelContext } from './raphaelcontext';\nimport { SVGContext } from './svgcontext';\nimport { Vex } from './vex';\n\nlet lastContext = null;\n\nexport class Renderer {\n static get Backends() {\n return {\n CANVAS: 1,\n RAPHAEL: 2,\n SVG: 3,\n VML: 4,\n };\n }\n\n // End of line types\n static get LineEndType() {\n return {\n NONE: 1, // No leg\n UP: 2, // Upward leg\n DOWN: 3, // Downward leg\n };\n }\n\n // Set this to true if you're using VexFlow inside a runtime\n // that does not allow modifiying canvas objects. There is a small\n // performance degradation due to the extra indirection.\n static get USE_CANVAS_PROXY() {\n return false;\n }\n\n static get lastContext() {\n return lastContext;\n }\n static set lastContext(ctx) {\n lastContext = ctx;\n }\n\n static buildContext(elementId, backend, width, height, background) {\n const renderer = new Renderer(elementId, backend);\n if (width && height) {\n renderer.resize(width, height);\n }\n\n if (!background) background = '#FFF';\n const ctx = renderer.getContext();\n ctx.setBackgroundFillStyle(background);\n Renderer.lastContext = ctx;\n return ctx;\n }\n\n static getCanvasContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.CANVAS, width, height, background);\n }\n\n static getRaphaelContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.RAPHAEL, width, height, background);\n }\n\n static getSVGContext(elementId, width, height, background) {\n return Renderer.buildContext(elementId, Renderer.Backends.SVG, width, height, background);\n }\n\n static bolsterCanvasContext(ctx) {\n if (Renderer.USE_CANVAS_PROXY) {\n return new CanvasContext(ctx);\n }\n\n const methodNames = [\n 'clear', 'setFont', 'setRawFont', 'setFillStyle', 'setBackgroundFillStyle',\n 'setStrokeStyle', 'setShadowColor', 'setShadowBlur', 'setLineWidth',\n 'setLineCap', 'setLineDash', 'openGroup', 'closeGroup', 'getGroup',\n ];\n\n ctx.vexFlowCanvasContext = ctx;\n\n methodNames.forEach(methodName => {\n ctx[methodName] = ctx[methodName] || CanvasContext.prototype[methodName];\n });\n\n return ctx;\n }\n\n // Draw a dashed line (horizontal, vertical or diagonal\n // dashPattern = [3,3] draws a 3 pixel dash followed by a three pixel space.\n // setting the second number to 0 draws a solid line.\n static drawDashedLine(context, fromX, fromY, toX, toY, dashPattern) {\n context.beginPath();\n\n const dx = toX - fromX;\n const dy = toY - fromY;\n const angle = Math.atan2(dy, dx);\n let x = fromX;\n let y = fromY;\n context.moveTo(fromX, fromY);\n let idx = 0;\n let draw = true;\n while (!((dx < 0 ? x <= toX : x >= toX) && (dy < 0 ? y <= toY : y >= toY))) {\n const dashLength = dashPattern[idx++ % dashPattern.length];\n const nx = x + (Math.cos(angle) * dashLength);\n x = dx < 0 ? Math.max(toX, nx) : Math.min(toX, nx);\n const ny = y + (Math.sin(angle) * dashLength);\n y = dy < 0 ? Math.max(toY, ny) : Math.min(toY, ny);\n if (draw) {\n context.lineTo(x, y);\n } else {\n context.moveTo(x, y);\n }\n draw = !draw;\n }\n\n context.closePath();\n context.stroke();\n }\n\n constructor(elementId, backend) {\n this.elementId = elementId;\n if (!this.elementId) {\n throw new Vex.RERR('BadArgument', 'Invalid id for renderer.');\n }\n\n this.element = document.getElementById(elementId);\n if (!this.element) this.element = elementId;\n\n // Verify backend and create context\n this.ctx = null;\n this.paper = null;\n this.backend = backend;\n if (this.backend === Renderer.Backends.CANVAS) {\n // Create context.\n if (!this.element.getContext) {\n throw new Vex.RERR('BadElement', `Can't get canvas context from element: ${elementId}`);\n }\n this.ctx = Renderer.bolsterCanvasContext(this.element.getContext('2d'));\n } else if (this.backend === Renderer.Backends.RAPHAEL) {\n this.ctx = new RaphaelContext(this.element);\n } else if (this.backend === Renderer.Backends.SVG) {\n this.ctx = new SVGContext(this.element);\n } else {\n throw new Vex.RERR('InvalidBackend', `No support for backend: ${this.backend}`);\n }\n }\n\n resize(width, height) {\n if (this.backend === Renderer.Backends.CANVAS) {\n if (!this.element.getContext) {\n throw new Vex.RERR(\n 'BadElement', `Can't get canvas context from element: ${this.elementId}`\n );\n }\n [width, height] = CanvasContext.SanitizeCanvasDims(width, height);\n\n const devicePixelRatio = window.devicePixelRatio || 1;\n\n this.element.width = width * devicePixelRatio;\n this.element.height = height * devicePixelRatio;\n this.element.style.width = width + 'px';\n this.element.style.height = height + 'px';\n\n this.ctx = Renderer.bolsterCanvasContext(this.element.getContext('2d'));\n this.ctx.scale(devicePixelRatio, devicePixelRatio);\n } else {\n this.ctx.resize(width, height);\n }\n\n return this;\n }\n\n getContext() { return this.ctx; }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `Stem` object. Generally this object is handled\n// by its parent `StemmableNote`.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Flow } from './tables';\n\n// To enable logging for this class. Set `Vex.Flow.Stem.DEBUG` to `true`.\nfunction L(...args) { if (Stem.DEBUG) Vex.L('Vex.Flow.Stem', args); }\n\nexport class Stem extends Element {\n static get CATEGORY() { return 'stem'; }\n\n // Stem directions\n static get UP() {\n return 1;\n }\n static get DOWN() {\n return -1;\n }\n\n // Theme\n static get WIDTH() {\n return Flow.STEM_WIDTH;\n }\n static get HEIGHT() {\n return Flow.STEM_HEIGHT;\n }\n\n constructor(options = {}) {\n super();\n this.setAttribute('type', 'Stem');\n\n // Default notehead x bounds\n this.x_begin = options.x_begin || 0;\n this.x_end = options.x_end || 0;\n\n // Y bounds for top/bottom most notehead\n this.y_top = options.y_top || 0;\n this.y_bottom = options.y_bottom || 0;\n\n // Stem top extension\n this.stem_extension = options.stem_extension || 0;\n\n // Direction of the stem\n this.stem_direction = options.stem_direction || 0;\n\n // Flag to override all draw calls\n this.hide = options.hide || false;\n\n this.isStemlet = options.isStemlet || false;\n this.stemletHeight = options.stemletHeight || 0;\n\n // Use to adjust the rendered height without affecting\n // the results of `.getExtents()`\n this.renderHeightAdjustment = 0;\n this.setOptions(options);\n }\n\n setOptions(options) {\n // Changing where the stem meets the head\n this.stem_up_y_offset = options.stem_up_y_offset || 0;\n this.stem_down_y_offset = options.stem_down_y_offset || 0;\n this.stem_up_y_base_offset = options.stem_up_y_base_offset || 0;\n this.stem_down_y_base_offset = options.stem_down_y_base_offset || 0;\n }\n\n // Set the x bounds for the default notehead\n setNoteHeadXBounds(x_begin, x_end) {\n this.x_begin = x_begin;\n this.x_end = x_end;\n return this;\n }\n\n // Set the direction of the stem in relation to the noteheads\n setDirection(direction) { this.stem_direction = direction; }\n\n // Set the extension for the stem, generally for flags or beams\n setExtension(ext) { this.stem_extension = ext; }\n getExtension() { return this.stem_extension; }\n\n // The the y bounds for the top and bottom noteheads\n setYBounds(y_top, y_bottom) {\n this.y_top = y_top;\n this.y_bottom = y_bottom;\n }\n\n // The category of the object\n getCategory() { return Stem.CATEGORY; }\n\n // Gets the entire height for the stem\n getHeight() {\n const y_offset = (this.stem_direction === Stem.UP) ? this.stem_up_y_offset : this.stem_down_y_offset; // eslint-disable-line max-len\n return ((this.y_bottom - this.y_top) * this.stem_direction) +\n ((Stem.HEIGHT - y_offset + this.stem_extension) * this.stem_direction);\n }\n getBoundingBox() {\n throw new Vex.RERR('NotImplemented', 'getBoundingBox() not implemented.');\n }\n\n // Get the y coordinates for the very base of the stem to the top of\n // the extension\n getExtents() {\n const isStemUp = this.stem_direction === Stem.UP;\n const ys = [this.y_top, this.y_bottom];\n const stemHeight = Stem.HEIGHT + this.stem_extension;\n\n const innerMostNoteheadY = (isStemUp ? Math.min : Math.max)(...ys);\n const outerMostNoteheadY = (isStemUp ? Math.max : Math.min)(...ys);\n const stemTipY = innerMostNoteheadY + (stemHeight * -this.stem_direction);\n\n return { topY: stemTipY, baseY: outerMostNoteheadY };\n }\n\n setVisibility(isVisible) {\n this.hide = !isVisible;\n return this;\n }\n\n setStemlet(isStemlet, stemletHeight) {\n this.isStemlet = isStemlet;\n this.stemletHeight = stemletHeight;\n return this;\n }\n\n // Render the stem onto the canvas\n draw() {\n this.setRendered();\n if (this.hide) return;\n const ctx = this.checkContext();\n\n let stem_x;\n let stem_y;\n const stem_direction = this.stem_direction;\n\n let y_base_offset = 0;\n if (stem_direction === Stem.DOWN) {\n // Down stems are rendered to the left of the head.\n stem_x = this.x_begin;\n stem_y = this.y_top + this.stem_down_y_offset;\n y_base_offset = this.stem_down_y_base_offset;\n } else {\n // Up stems are rendered to the right of the head.\n stem_x = this.x_end;\n stem_y = this.y_bottom - this.stem_up_y_offset;\n y_base_offset = this.stem_up_y_base_offset;\n }\n\n const stemHeight = this.getHeight();\n\n L('Rendering stem - ', 'Top Y: ', this.y_top, 'Bottom Y: ', this.y_bottom);\n\n // The offset from the stem's base which is required fo satisfy the stemlet height\n const stemletYOffset = this.isStemlet\n ? stemHeight - this.stemletHeight * this.stem_direction\n : 0;\n\n // Draw the stem\n ctx.save();\n this.applyStyle(ctx);\n ctx.beginPath();\n ctx.setLineWidth(Stem.WIDTH);\n ctx.moveTo(stem_x, stem_y - stemletYOffset + y_base_offset);\n ctx.lineTo(stem_x, stem_y - stemHeight - (this.renderHeightAdjustment * stem_direction));\n ctx.stroke();\n this.restoreStyle(ctx);\n ctx.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\n/**\n * ## Description\n *\n * Create a new tuplet from the specified notes. The notes must\n * be part of the same voice. If they are of different rhythmic\n * values, then options.num_notes must be set.\n *\n * @constructor\n * @param {Array.} A set of notes: staveNotes,\n * notes, etc... any class that inherits stemmableNote at some\n * point in its prototype chain.\n * @param options: object {\n *\n * num_notes: fit this many notes into...\n * notes_occupied: ...the space of this many notes\n *\n * Together, these two properties make up the tuplet ratio\n * in the form of num_notes : notes_occupied.\n * num_notes defaults to the number of notes passed in, so\n * it is important that if you omit this property, all of\n * the notes passed should be of the same note value.\n * notes_occupied defaults to 2 -- so you should almost\n * certainly pass this parameter for anything other than\n * a basic triplet.\n *\n * location:\n * default 1, which is above the notes: ┌─── 3 ───┐\n * -1 is below the notes └─── 3 ───┘\n *\n * bracketed: boolean, draw a bracket around the tuplet number\n * when true: ┌─── 3 ───┐ when false: 3\n * defaults to true if notes are not beamed, false otherwise\n *\n * ratioed: boolean\n * when true: ┌─── 7:8 ───┐, when false: ┌─── 7 ───┐\n * defaults to true if the difference between num_notes and\n * notes_occupied is greater than 1.\n *\n * y_offset: int, default 0\n * manually offset a tuplet, for instance to avoid collisions\n * with articulations, etc...\n * }\n */\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Formatter } from './formatter';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\n\nexport class Tuplet extends Element {\n static get LOCATION_TOP() {\n return 1;\n }\n static get LOCATION_BOTTOM() {\n return -1;\n }\n static get NESTING_OFFSET() {\n return 15;\n }\n\n constructor(notes, options) {\n super();\n this.setAttribute('type', 'Tuplet');\n if (!notes || !notes.length) {\n throw new Vex.RuntimeError('BadArguments', 'No notes provided for tuplet.');\n }\n\n this.options = Vex.Merge({}, options);\n this.notes = notes;\n this.num_notes = 'num_notes' in this.options ?\n this.options.num_notes : notes.length;\n\n // We accept beats_occupied, but warn that it's deprecated:\n // the preferred property name is now notes_occupied.\n if (this.options.beats_occupied) {\n this.beatsOccupiedDeprecationWarning();\n }\n this.notes_occupied = this.options.notes_occupied ||\n this.options.beats_occupied ||\n 2;\n if ('bracketed' in this.options) {\n this.bracketed = this.options.bracketed;\n } else {\n this.bracketed =\n notes.some(note => note.beam === null);\n }\n\n this.ratioed = 'ratioed' in this.options ?\n this.options.ratioed :\n (Math.abs(this.notes_occupied - this.num_notes) > 1);\n this.point = this.musicFont.lookupMetric('digits.tupletPoint');\n this.y_pos = 16;\n this.x_pos = 100;\n this.width = 200;\n this.location = this.options.location || Tuplet.LOCATION_TOP;\n\n Formatter.AlignRestsToNotes(notes, true, true);\n this.resolveGlyphs();\n this.attach();\n }\n\n attach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.setTuplet(this);\n }\n }\n\n detach() {\n for (let i = 0; i < this.notes.length; i++) {\n const note = this.notes[i];\n note.resetTuplet(this);\n }\n }\n\n /**\n * Set whether or not the bracket is drawn.\n */\n setBracketed(bracketed) {\n this.bracketed = !!bracketed;\n return this;\n }\n\n /**\n * Set whether or not the ratio is shown.\n */\n setRatioed(ratioed) {\n this.ratioed = !!ratioed;\n return this;\n }\n\n /**\n * Set the tuplet to be displayed either on the top or bottom of the stave\n */\n setTupletLocation(location) {\n if (!location) {\n location = Tuplet.LOCATION_TOP;\n } else if (location !== Tuplet.LOCATION_TOP && location !== Tuplet.LOCATION_BOTTOM) {\n throw new Vex.RERR('BadArgument', 'Invalid tuplet location: ' + location);\n }\n\n this.location = location;\n return this;\n }\n\n getNotes() {\n return this.notes;\n }\n\n getNoteCount() {\n return this.num_notes;\n }\n\n beatsOccupiedDeprecationWarning() {\n const msg = [\n 'beats_occupied has been deprecated as an ',\n 'option for tuplets. Please use notes_occupied ',\n 'instead. Calls to getBeatsOccupied and ',\n 'setBeatsOccupied should now be routed to ',\n 'getNotesOccupied and setNotesOccupied instead',\n ].join('');\n\n if (console && console.warn) { // eslint-disable-line no-console\n console.warn(msg); // eslint-disable-line no-console\n } else if (console) {\n console.log(msg); // eslint-disable-line no-console\n }\n }\n\n getBeatsOccupied() {\n this.beatsOccupiedDeprecationWarning();\n return this.getNotesOccupied();\n }\n\n setBeatsOccupied(beats) {\n this.beatsOccupiedDeprecationWarning();\n return this.setNotesOccupied(beats);\n }\n\n getNotesOccupied() {\n return this.notes_occupied;\n }\n\n setNotesOccupied(notes) {\n this.detach();\n this.notes_occupied = notes;\n this.resolveGlyphs();\n this.attach();\n }\n\n resolveGlyphs() {\n this.numerator_glyphs = [];\n let n = this.num_notes;\n while (n >= 1) {\n this.numerator_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt(n / 10, 10);\n }\n\n this.denom_glyphs = [];\n n = this.notes_occupied;\n while (n >= 1) {\n this.denom_glyphs.unshift(new Glyph('timeSig' + (n % 10), this.point));\n n = parseInt(n / 10, 10);\n }\n }\n\n // determine how many tuplets are nested within this tuplet\n // on the same side (above/below), to calculate a y\n // offset for this tuplet:\n getNestedTupletCount() {\n const location = this.location;\n const first_note = this.notes[0];\n let maxTupletCount = countTuplets(first_note, location);\n let minTupletCount = countTuplets(first_note, location);\n\n // Count the tuplets that are on the same side (above/below)\n // as this tuplet:\n function countTuplets(note, location) {\n return note.tupletStack.filter(tuplet => tuplet.location === location).length;\n }\n\n this.notes.forEach(note => {\n const tupletCount = countTuplets(note, location);\n maxTupletCount = tupletCount > maxTupletCount ? tupletCount : maxTupletCount;\n minTupletCount = tupletCount < minTupletCount ? tupletCount : minTupletCount;\n });\n\n return maxTupletCount - minTupletCount;\n }\n\n // determine the y position of the tuplet:\n getYPosition() {\n // offset the tuplet for any nested tuplets between\n // it and the notes:\n const nested_tuplet_y_offset =\n this.getNestedTupletCount() *\n Tuplet.NESTING_OFFSET *\n -this.location;\n\n // offset the tuplet for any manual y_offset:\n const y_offset = this.options.y_offset || 0;\n\n // now iterate through the notes and find our highest\n // or lowest locations, to form a base y_pos\n const first_note = this.notes[0];\n let y_pos;\n if (this.location === Tuplet.LOCATION_TOP) {\n y_pos = first_note.getStave().getYForLine(0) - 15;\n // y_pos = first_note.getStemExtents().topY - 10;\n\n for (let i = 0; i < this.notes.length; ++i) {\n const top_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().topY - 10\n : this.notes[i].getStemExtents().baseY - 20;\n\n if (top_y < y_pos) {\n y_pos = top_y;\n }\n }\n } else {\n y_pos = first_note.getStave().getYForLine(4) + 20;\n\n for (let i = 0; i < this.notes.length; ++i) {\n const bottom_y = this.notes[i].getStemDirection() === Stem.UP\n ? this.notes[i].getStemExtents().baseY + 20\n : this.notes[i].getStemExtents().topY + 10;\n if (bottom_y > y_pos) {\n y_pos = bottom_y;\n }\n }\n }\n\n return y_pos + nested_tuplet_y_offset + y_offset;\n }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n // determine x value of left bound of tuplet\n const first_note = this.notes[0];\n const last_note = this.notes[this.notes.length - 1];\n\n if (!this.bracketed) {\n this.x_pos = first_note.getStemX();\n this.width = last_note.getStemX() - this.x_pos;\n } else {\n this.x_pos = first_note.getTieLeftX() - 5;\n this.width = last_note.getTieRightX() - this.x_pos + 5;\n }\n\n // determine y value for tuplet\n this.y_pos = this.getYPosition();\n\n const addGlyphWidth = (width, glyph) => width + glyph.getMetrics().width;\n\n // calculate total width of tuplet notation\n let width = this.numerator_glyphs.reduce(addGlyphWidth, 0);\n if (this.ratioed) {\n width = this.denom_glyphs.reduce(addGlyphWidth, width);\n width += this.point * 0.32;\n }\n\n const notation_center_x = this.x_pos + (this.width / 2);\n const notation_start_x = notation_center_x - (width / 2);\n\n // draw bracket if the tuplet is not beamed\n if (this.bracketed) {\n const line_width = this.width / 2 - width / 2 - 5;\n\n // only draw the bracket if it has positive length\n if (line_width > 0) {\n this.context.fillRect(this.x_pos, this.y_pos, line_width, 1);\n this.context.fillRect(\n this.x_pos + this.width / 2 + width / 2 + 5,\n this.y_pos,\n line_width,\n 1\n );\n this.context.fillRect(\n this.x_pos,\n this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM),\n 1,\n this.location * 10\n );\n this.context.fillRect(\n this.x_pos + this.width,\n this.y_pos + (this.location === Tuplet.LOCATION_BOTTOM),\n 1,\n this.location * 10\n );\n }\n }\n\n // draw numerator glyphs\n const shiftY = this.musicFont.lookupMetric('digits.shiftY', 0);\n\n let x_offset = 0;\n this.numerator_glyphs.forEach(glyph => {\n glyph.render(this.context, notation_start_x + x_offset, this.y_pos + (this.point / 3) - 2 + shiftY);\n x_offset += glyph.getMetrics().width;\n });\n\n // display colon and denominator if the ratio is to be shown\n if (this.ratioed) {\n const colon_x = notation_start_x + x_offset + this.point * 0.16;\n const colon_radius = this.point * 0.06;\n this.context.beginPath();\n this.context.arc(colon_x, this.y_pos - this.point * 0.08, colon_radius, 0, Math.PI * 2, true);\n this.context.closePath();\n this.context.fill();\n this.context.beginPath();\n this.context.arc(colon_x, this.y_pos + this.point * 0.12, colon_radius, 0, Math.PI * 2, true);\n this.context.closePath();\n this.context.fill();\n x_offset += this.point * 0.32;\n this.denom_glyphs.forEach(glyph => {\n glyph.render(this.context, notation_start_x + x_offset, this.y_pos + (this.point / 3) - 2 + shiftY);\n x_offset += glyph.getMetrics().width;\n });\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `Beams` that span over a set of `StemmableNotes`.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Tuplet } from './tuplet';\nimport { Stem } from './stem';\n\nfunction calculateStemDirection(notes) {\n let lineSum = 0;\n notes.forEach(note => {\n if (note.keyProps) {\n note.keyProps.forEach(keyProp => {\n lineSum += (keyProp.line - 3);\n });\n }\n });\n\n if (lineSum >= 0) {\n return Stem.DOWN;\n }\n return Stem.UP;\n}\n\nconst getStemSlope = (firstNote, lastNote) => {\n const firstStemTipY = firstNote.getStemExtents().topY;\n const firstStemX = firstNote.getStemX();\n const lastStemTipY = lastNote.getStemExtents().topY;\n const lastStemX = lastNote.getStemX();\n return (lastStemTipY - firstStemTipY) / (lastStemX - firstStemX);\n};\n\nconst BEAM_LEFT = 'L';\nconst BEAM_RIGHT = 'R';\nconst BEAM_BOTH = 'B';\n\nexport class Beam extends Element {\n // Gets the default beam groups for a provided time signature.\n // Attempts to guess if the time signature is not found in table.\n // Currently this is fairly naive.\n static getDefaultBeamGroups(time_sig) {\n if (!time_sig || time_sig === 'c') {\n time_sig = '4/4';\n }\n\n const defaults = {\n '1/2': ['1/2'],\n '2/2': ['1/2'],\n '3/2': ['1/2'],\n '4/2': ['1/2'],\n\n '1/4': ['1/4'],\n '2/4': ['1/4'],\n '3/4': ['1/4'],\n '4/4': ['1/4'],\n\n '1/8': ['1/8'],\n '2/8': ['2/8'],\n '3/8': ['3/8'],\n '4/8': ['2/8'],\n\n '1/16': ['1/16'],\n '2/16': ['2/16'],\n '3/16': ['3/16'],\n '4/16': ['2/16'],\n };\n\n const groups = defaults[time_sig];\n\n if (groups === undefined) {\n // If no beam groups found, naively determine\n // the beam groupings from the time signature\n const beatTotal = parseInt(time_sig.split('/')[0], 10);\n const beatValue = parseInt(time_sig.split('/')[1], 10);\n\n const tripleMeter = beatTotal % 3 === 0;\n\n if (tripleMeter) {\n return [new Fraction(3, beatValue)];\n } else if (beatValue > 4) {\n return [new Fraction(2, beatValue)];\n } else if (beatValue <= 4) {\n return [new Fraction(1, beatValue)];\n }\n } else {\n return groups.map(group => new Fraction().parse(group));\n }\n\n return [new Fraction(1, 4)];\n }\n\n // A helper function to automatically build basic beams for a voice. For more\n // complex auto-beaming use `Beam.generateBeams()`.\n //\n // Parameters:\n // * `voice` - The voice to generate the beams for\n // * `stem_direction` - A stem direction to apply to the entire voice\n // * `groups` - An array of `Fraction` representing beat groupings for the beam\n static applyAndGetBeams(voice, stem_direction, groups) {\n return Beam.generateBeams(voice.getTickables(), {\n groups,\n stem_direction,\n });\n }\n\n // A helper function to autimatically build beams for a voice with\n // configuration options.\n //\n // Example configuration object:\n //\n // ```\n // config = {\n // groups: [new Vex.Flow.Fraction(2, 8)],\n // stem_direction: -1,\n // beam_rests: true,\n // beam_middle_only: true,\n // show_stemlets: false\n // };\n // ```\n //\n // Parameters:\n // * `notes` - An array of notes to create the beams for\n // * `config` - The configuration object\n // * `groups` - Array of `Fractions` that represent the beat structure to beam the notes\n // * `stem_direction` - Set to apply the same direction to all notes\n // * `beam_rests` - Set to `true` to include rests in the beams\n // * `beam_middle_only` - Set to `true` to only beam rests in the middle of the beat\n // * `show_stemlets` - Set to `true` to draw stemlets for rests\n // * `maintain_stem_directions` - Set to `true` to not apply new stem directions\n //\n static generateBeams(notes, config) {\n if (!config) config = {};\n\n if (!config.groups || !config.groups.length) {\n config.groups = [new Fraction(2, 8)];\n }\n\n // Convert beam groups to tick amounts\n const tickGroups = config.groups.map(group => {\n if (!group.multiply) {\n throw new Vex.RuntimeError('InvalidBeamGroups',\n 'The beam groups must be an array of Vex.Flow.Fractions');\n }\n return group.clone().multiply(Flow.RESOLUTION, 1);\n });\n\n const unprocessedNotes = notes;\n let currentTickGroup = 0;\n let noteGroups = [];\n let currentGroup = [];\n\n function getTotalTicks(vf_notes) {\n return vf_notes.reduce((memo, note) => note.getTicks().clone().add(memo), new Fraction(0, 1));\n }\n\n function nextTickGroup() {\n if (tickGroups.length - 1 > currentTickGroup) {\n currentTickGroup += 1;\n } else {\n currentTickGroup = 0;\n }\n }\n\n function createGroups() {\n let nextGroup = [];\n\n unprocessedNotes.forEach(unprocessedNote => {\n nextGroup = [];\n if (unprocessedNote.shouldIgnoreTicks()) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n return; // Ignore untickables (like bar notes)\n }\n\n currentGroup.push(unprocessedNote);\n const ticksPerGroup = tickGroups[currentTickGroup].clone();\n const totalTicks = getTotalTicks(currentGroup);\n\n // Double the amount of ticks in a group, if it's an unbeamable tuplet\n const unbeamable = Flow.durationToNumber(unprocessedNote.duration) < 8;\n if (unbeamable && unprocessedNote.tuplet) {\n ticksPerGroup.numerator *= 2;\n }\n\n // If the note that was just added overflows the group tick total\n if (totalTicks.greaterThan(ticksPerGroup)) {\n // If the overflow note can be beamed, start the next group\n // with it. Unbeamable notes leave the group overflowed.\n if (!unbeamable) {\n nextGroup.push(currentGroup.pop());\n }\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n nextTickGroup();\n } else if (totalTicks.equals(ticksPerGroup)) {\n noteGroups.push(currentGroup);\n currentGroup = nextGroup;\n nextTickGroup();\n }\n });\n\n // Adds any remainder notes\n if (currentGroup.length > 0) {\n noteGroups.push(currentGroup);\n }\n }\n\n function getBeamGroups() {\n return noteGroups.filter(group => {\n if (group.length > 1) {\n let beamable = true;\n group.forEach(note => {\n if (note.getIntrinsicTicks() >= Flow.durationToTicks('4')) {\n beamable = false;\n }\n });\n return beamable;\n }\n return false;\n });\n }\n\n // Splits up groups by Rest\n function sanitizeGroups() {\n const sanitizedGroups = [];\n noteGroups.forEach(group => {\n let tempGroup = [];\n group.forEach((note, index, group) => {\n const isFirstOrLast = index === 0 || index === group.length - 1;\n const prevNote = group[index - 1];\n\n const breaksOnEachRest = !config.beam_rests && note.isRest();\n const breaksOnFirstOrLastRest = (config.beam_rests &&\n config.beam_middle_only && note.isRest() && isFirstOrLast);\n\n let breakOnStemChange = false;\n if (config.maintain_stem_directions && prevNote &&\n !note.isRest() && !prevNote.isRest()) {\n const prevDirection = prevNote.getStemDirection();\n const currentDirection = note.getStemDirection();\n breakOnStemChange = currentDirection !== prevDirection;\n }\n\n const isUnbeamableDuration = parseInt(note.duration, 10) < 8;\n\n // Determine if the group should be broken at this note\n const shouldBreak = breaksOnEachRest || breaksOnFirstOrLastRest ||\n breakOnStemChange || isUnbeamableDuration;\n\n if (shouldBreak) {\n // Add current group\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n\n // Start a new group. Include the current note if the group\n // was broken up by stem direction, as that note needs to start\n // the next group of notes\n tempGroup = breakOnStemChange ? [note] : [];\n } else {\n // Add note to group\n tempGroup.push(note);\n }\n });\n\n // If there is a remaining group, add it as well\n if (tempGroup.length > 0) {\n sanitizedGroups.push(tempGroup);\n }\n });\n\n noteGroups = sanitizedGroups;\n }\n\n function formatStems() {\n noteGroups.forEach(group => {\n let stemDirection;\n if (config.maintain_stem_directions) {\n const note = findFirstNote(group);\n stemDirection = note ? note.getStemDirection() : Stem.UP;\n } else {\n if (config.stem_direction) {\n stemDirection = config.stem_direction;\n } else {\n stemDirection = calculateStemDirection(group);\n }\n }\n applyStemDirection(group, stemDirection);\n });\n }\n\n function findFirstNote(group) {\n for (let i = 0; i < group.length; i++) {\n const note = group[i];\n if (!note.isRest()) {\n return note;\n }\n }\n\n return false;\n }\n\n function applyStemDirection(group, direction) {\n group.forEach(note => {\n note.setStemDirection(direction);\n });\n }\n\n // Get all of the tuplets in all of the note groups\n function getTuplets() {\n const uniqueTuplets = [];\n\n // Go through all of the note groups and inspect for tuplets\n noteGroups.forEach(group => {\n let tuplet = null;\n group.forEach(note => {\n if (note.tuplet && (tuplet !== note.tuplet)) {\n tuplet = note.tuplet;\n uniqueTuplets.push(tuplet);\n }\n });\n });\n return uniqueTuplets;\n }\n\n\n // Using closures to store the variables throughout the various functions\n // IMO Keeps it this process lot cleaner - but not super consistent with\n // the rest of the API's style - Silverwolf90 (Cyril)\n createGroups();\n sanitizeGroups();\n formatStems();\n\n // Get the notes to be beamed\n const beamedNoteGroups = getBeamGroups();\n\n // Get the tuplets in order to format them accurately\n const allTuplets = getTuplets();\n\n // Create a Vex.Flow.Beam from each group of notes to be beamed\n const beams = [];\n beamedNoteGroups.forEach(group => {\n const beam = new Beam(group);\n\n if (config.show_stemlets) {\n beam.render_options.show_stemlets = true;\n }\n if (config.secondary_breaks) {\n beam.render_options.secondary_break_ticks = Flow.durationToTicks(config.secondary_breaks);\n }\n if (config.flat_beams === true) {\n beam.render_options.flat_beams = true;\n beam.render_options.flat_beam_offset = config.flat_beam_offset;\n }\n beams.push(beam);\n });\n\n // Reformat tuplets\n allTuplets.forEach(tuplet => {\n // Set the tuplet location based on the stem direction\n const direction = tuplet.notes[0].stem_direction === Stem.DOWN ?\n Tuplet.LOCATION_BOTTOM : Tuplet.LOCATION_TOP;\n tuplet.setTupletLocation(direction);\n\n // If any of the notes in the tuplet are not beamed, draw a bracket.\n let bracketed = false;\n for (let i = 0; i < tuplet.notes.length; i++) {\n const note = tuplet.notes[i];\n if (note.beam === null) {\n bracketed = true;\n break;\n }\n }\n tuplet.setBracketed(bracketed);\n });\n\n return beams;\n }\n\n constructor(notes, auto_stem) {\n super();\n this.setAttribute('type', 'Beam');\n\n if (!notes || notes === []) {\n throw new Vex.RuntimeError('BadArguments', 'No notes provided for beam.');\n }\n\n if (notes.length === 1) {\n throw new Vex.RuntimeError('BadArguments', 'Too few notes for beam.');\n }\n\n // Validate beam line, direction and ticks.\n this.ticks = notes[0].getIntrinsicTicks();\n\n if (this.ticks >= Flow.durationToTicks('4')) {\n throw new Vex.RuntimeError('BadArguments',\n 'Beams can only be applied to notes shorter than a quarter note.');\n }\n\n let i; // shared iterator\n let note;\n\n this.stem_direction = Stem.UP;\n\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (note.hasStem()) {\n this.stem_direction = note.getStemDirection();\n break;\n }\n }\n\n let stem_direction = this.stem_direction;\n // Figure out optimal stem direction based on given notes\n if (auto_stem && notes[0].getCategory() === 'stavenotes') {\n stem_direction = calculateStemDirection(notes);\n } else if (auto_stem && notes[0].getCategory() === 'tabnotes') {\n // Auto Stem TabNotes\n const stem_weight = notes.reduce((memo, note) => memo + note.stem_direction, 0);\n\n stem_direction = stem_weight > -1 ? Stem.UP : Stem.DOWN;\n }\n\n // Apply stem directions and attach beam to notes\n for (i = 0; i < notes.length; ++i) {\n note = notes[i];\n if (auto_stem) {\n note.setStemDirection(stem_direction);\n this.stem_direction = stem_direction;\n }\n note.setBeam(this);\n }\n\n this.postFormatted = false;\n this.notes = notes;\n this.beam_count = this.getBeamCount();\n this.break_on_indices = [];\n this.render_options = {\n beam_width: 5,\n max_slope: 0.25,\n min_slope: -0.25,\n slope_iterations: 20,\n slope_cost: 100,\n show_stemlets: false,\n stemlet_extension: 7,\n partial_beam_length: 10,\n flat_beams: false,\n min_flat_beam_offset: 15,\n };\n }\n\n // Get the notes in this beam\n getNotes() { return this.notes; }\n\n // Get the max number of beams in the set of notes\n getBeamCount() {\n const beamCounts = this.notes.map(note => note.getGlyph().beam_count);\n\n const maxBeamCount = beamCounts.reduce((max, beamCount) => beamCount > max ? beamCount : max);\n\n return maxBeamCount;\n }\n\n // Set which note `indices` to break the secondary beam at\n breakSecondaryAt(indices) {\n this.break_on_indices = indices;\n return this;\n }\n\n // Return the y coordinate for linear function\n getSlopeY(x, first_x_px, first_y_px, slope) {\n return first_y_px + ((x - first_x_px) * slope);\n }\n\n // Calculate the best possible slope for the provided notes\n calculateSlope() {\n const {\n notes,\n stem_direction: stemDirection,\n render_options: { max_slope, min_slope, slope_iterations, slope_cost },\n } = this;\n\n const firstNote = notes[0];\n const initialSlope = getStemSlope(firstNote, notes[notes.length - 1]);\n const increment = (max_slope - min_slope) / slope_iterations;\n let minCost = Number.MAX_VALUE;\n let bestSlope = 0;\n let yShift = 0;\n\n // iterate through slope values to find best weighted fit\n for (let slope = min_slope; slope <= max_slope; slope += increment) {\n let totalStemExtension = 0;\n let yShiftTemp = 0;\n\n // iterate through notes, calculating y shift and stem extension\n for (let i = 1; i < notes.length; ++i) {\n const note = notes[i];\n const adjustedStemTipY = this.getSlopeY(\n note.getStemX(),\n firstNote.getStemX(),\n firstNote.getStemExtents().topY,\n slope\n ) + yShiftTemp;\n\n const stemTipY = note.getStemExtents().topY;\n // beam needs to be shifted up to accommodate note\n if (stemTipY * stemDirection < adjustedStemTipY * stemDirection) {\n const diff = Math.abs(stemTipY - adjustedStemTipY);\n yShiftTemp += diff * -stemDirection;\n totalStemExtension += diff * i;\n } else { // beam overshoots note, account for the difference\n totalStemExtension += (stemTipY - adjustedStemTipY) * stemDirection;\n }\n }\n\n // most engraving books suggest aiming for a slope about half the angle of the\n // difference between the first and last notes' stem length;\n const idealSlope = initialSlope / 2;\n const distanceFromIdeal = Math.abs(idealSlope - slope);\n\n // This tries to align most beams to something closer to the idealSlope, but\n // doesn't go crazy. To disable, set this.render_options.slope_cost = 0\n const cost = slope_cost * distanceFromIdeal + Math.abs(totalStemExtension);\n\n // update state when a more ideal slope is found\n if (cost < minCost) {\n minCost = cost;\n bestSlope = slope;\n yShift = yShiftTemp;\n }\n }\n\n this.slope = bestSlope;\n this.y_shift = yShift;\n }\n\n // Calculate a slope and y-shift for flat beams\n calculateFlatSlope() {\n const {\n notes, stem_direction,\n render_options: { beam_width, min_flat_beam_offset, flat_beam_offset },\n } = this;\n\n // If a flat beam offset has not yet been supplied or calculated,\n // generate one based on the notes in this particular note group\n let total = 0;\n let extremeY = 0; // Store the highest or lowest note here\n let extremeBeamCount = 0; // The beam count of the extreme note\n let currentExtreme = 0;\n for (let i = 0; i < notes.length; i++) {\n // Total up all of the offsets so we can average them out later\n const note = notes[i];\n const stemTipY = note.getStemExtents().topY;\n total += stemTipY;\n\n // Store the highest (stems-up) or lowest (stems-down) note so the\n // offset can be adjusted in case the average isn't enough\n if (stem_direction === Stem.DOWN && currentExtreme < stemTipY) {\n currentExtreme = stemTipY;\n extremeY = Math.max(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n } else if (\n stem_direction === Stem.UP && (currentExtreme === 0 || currentExtreme > stemTipY)\n ) {\n currentExtreme = stemTipY;\n extremeY = Math.min(...note.getYs());\n extremeBeamCount = note.getBeamCount();\n }\n }\n\n // Average the offsets to try and come up with a reasonable one that\n // works for all of the notes in the beam group.\n let offset = total / notes.length;\n\n // In case the average isn't long enough, add or subtract some more\n // based on the highest or lowest note (again, based on the stem\n // direction). This also takes into account the added height due to\n // the width of the beams.\n const beamWidth = beam_width * 1.5;\n const extremeTest = min_flat_beam_offset + (extremeBeamCount * beamWidth);\n const newOffset = extremeY + (extremeTest * -stem_direction);\n if (stem_direction === Stem.DOWN && offset < newOffset) {\n offset = extremeY + extremeTest;\n } else if (stem_direction === Stem.UP && offset > newOffset) {\n offset = extremeY - extremeTest;\n }\n\n if (!flat_beam_offset) {\n // Set the offset for the group based on the calculations above.\n this.render_options.flat_beam_offset = offset;\n } else if (stem_direction === Stem.DOWN && offset > flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n } else if (stem_direction === Stem.UP && offset < flat_beam_offset) {\n this.render_options.flat_beam_offset = offset;\n }\n\n // for flat beams, the slope and y_shift are simply 0\n this.slope = 0;\n this.y_shift = 0;\n }\n\n getBeamYToDraw() {\n const firstNote = this.notes[0];\n const firstStemTipY = firstNote.getStemExtents().topY;\n let beamY = firstStemTipY;\n\n // For flat beams, set the first and last Y to the offset, rather than\n // using the note's stem extents.\n if (this.render_options.flat_beams && this.render_options.flat_beam_offset) {\n beamY = this.render_options.flat_beam_offset;\n }\n return beamY;\n }\n\n // Create new stems for the notes in the beam, so that each stem\n // extends into the beams.\n applyStemExtensions() {\n const {\n notes, slope, y_shift, stem_direction, beam_count,\n render_options: {\n show_stemlets,\n stemlet_extension,\n beam_width,\n },\n } = this;\n\n const firstNote = notes[0];\n const firstStemTipY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n\n for (let i = 0; i < notes.length; ++i) {\n const note = notes[i];\n const stemX = note.getStemX();\n const { topY: stemTipY } = note.getStemExtents();\n const beamedStemTipY = this.getSlopeY(stemX, firstStemX, firstStemTipY, slope) + y_shift;\n const preBeamExtension = note.getStem().getExtension();\n const beamExtension = stem_direction === Stem.UP\n ? stemTipY - beamedStemTipY\n : beamedStemTipY - stemTipY;\n\n note.stem.setExtension(preBeamExtension + beamExtension);\n note.stem.renderHeightAdjustment = -Stem.WIDTH / 2;\n\n if (note.isRest() && show_stemlets) {\n const beamWidth = beam_width;\n const totalBeamWidth = ((beam_count - 1) * beamWidth * 1.5) + beamWidth;\n note.stem\n .setVisibility(true)\n .setStemlet(true, totalBeamWidth + stemlet_extension);\n }\n }\n }\n\n // return upper level beam direction.\n lookupBeamDirection(duration, prev_tick, tick, next_tick) {\n if (duration === '4') {\n return BEAM_LEFT;\n }\n\n const lookup_duration = `${Flow.durationToNumber(duration) / 2}`;\n const prev_note_gets_beam = prev_tick < Flow.durationToTicks(lookup_duration);\n const next_note_gets_beam = next_tick < Flow.durationToTicks(lookup_duration);\n const note_gets_beam = tick < Flow.durationToTicks(lookup_duration);\n\n if (prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_BOTH;\n } else if (prev_note_gets_beam && !next_note_gets_beam && note_gets_beam) {\n return BEAM_LEFT;\n } else if (!prev_note_gets_beam && next_note_gets_beam && note_gets_beam) {\n return BEAM_RIGHT;\n }\n\n return this.lookupBeamDirection(lookup_duration, prev_tick, tick, next_tick);\n }\n\n // Get the x coordinates for the beam lines of specific `duration`\n getBeamLines(duration) {\n const tick_of_duration = Flow.durationToTicks(duration);\n const beam_lines = [];\n let beam_started = false;\n let current_beam = null;\n const partial_beam_length = this.render_options.partial_beam_length;\n let previous_should_break = false;\n let tick_tally = 0;\n for (let i = 0; i < this.notes.length; ++i) {\n const note = this.notes[i];\n\n // See if we need to break secondary beams on this note.\n const ticks = note.ticks.value();\n tick_tally += ticks;\n let should_break = false;\n\n // 8th note beams are always drawn.\n if (parseInt(duration, 10) >= 8) {\n // First, check to see if any indices were set up through breakSecondaryAt()\n should_break = this.break_on_indices.indexOf(i) !== -1;\n\n // If the secondary breaks were auto-configured in the render options,\n // handle that as well.\n if (this.render_options.secondary_break_ticks && tick_tally >=\n this.render_options.secondary_break_ticks) {\n tick_tally = 0;\n should_break = true;\n }\n }\n const note_gets_beam = note.getIntrinsicTicks() < tick_of_duration;\n\n const stem_x = note.getStemX() - (Stem.WIDTH / 2);\n\n // Check to see if the next note in the group will get a beam at this\n // level. This will help to inform the partial beam logic below.\n const prev_note = this.notes[i - 1];\n const next_note = this.notes[i + 1];\n const next_note_gets_beam = next_note && next_note.getIntrinsicTicks() < tick_of_duration;\n const prev_note_gets_beam = prev_note && prev_note.getIntrinsicTicks() < tick_of_duration;\n const beam_alone = prev_note && next_note &&\n note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n // const beam_alone = note_gets_beam && !prev_note_gets_beam && !next_note_gets_beam;\n if (note_gets_beam) {\n // This note gets a beam at the current level\n if (beam_started) {\n // We're currently in the middle of a beam. Just continue it on to\n // the stem X of the current note.\n current_beam = beam_lines[beam_lines.length - 1];\n current_beam.end = stem_x;\n\n // If a secondary beam break is set up, end the beam right now.\n if (should_break) {\n beam_started = false;\n if (next_note && !next_note_gets_beam && current_beam.end === null) {\n // This note gets a beam,.but the next one does not. This means\n // we need a partial pointing right.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n }\n } else {\n // No beam started yet. Start a new one.\n current_beam = { start: stem_x, end: null };\n beam_started = true;\n\n if (beam_alone) {\n // previous and next beam exists and does not get a beam but current gets it.\n const prev_tick = prev_note.getIntrinsicTicks();\n const next_tick = next_note.getIntrinsicTicks();\n const tick = note.getIntrinsicTicks();\n const beam_direction = this.lookupBeamDirection(duration, prev_tick, tick, next_tick);\n\n if ([BEAM_LEFT, BEAM_BOTH].includes(beam_direction)) {\n current_beam.end = current_beam.start - partial_beam_length;\n } else {\n current_beam.end = current_beam.start + partial_beam_length;\n }\n } else if (!next_note_gets_beam) {\n // The next note doesn't get a beam. Draw a partial.\n if ((previous_should_break || i === 0) && next_note) {\n // This is the first note (but not the last one), or it is\n // following a secondary break. Draw a partial to the right.\n current_beam.end = current_beam.start + partial_beam_length;\n } else {\n // By default, draw a partial to the left.\n current_beam.end = current_beam.start - partial_beam_length;\n }\n } else if (should_break) {\n // This note should have a secondary break after it. Even though\n // we just started a beam, it needs to end immediately.\n current_beam.end = current_beam.start - partial_beam_length;\n beam_started = false;\n }\n beam_lines.push(current_beam);\n }\n } else {\n // The current note does not get a beam.\n beam_started = false;\n }\n\n // Store the secondary break flag to inform the partial beam logic in\n // the next iteration of the loop.\n previous_should_break = should_break;\n }\n\n // Add a partial beam pointing left if this is the last note in the group\n const last_beam = beam_lines[beam_lines.length - 1];\n if (last_beam && last_beam.end === null) {\n last_beam.end = last_beam.start - partial_beam_length;\n }\n return beam_lines;\n }\n\n // Render the stems for each notes\n drawStems() {\n this.notes.forEach(note => {\n if (note.getStem()) {\n note.getStem().setContext(this.context).draw();\n }\n }, this);\n }\n\n // Render the beam lines\n drawBeamLines() {\n this.checkContext();\n\n const valid_beam_durations = ['4', '8', '16', '32', '64'];\n\n const firstNote = this.notes[0];\n let beamY = this.getBeamYToDraw();\n const firstStemX = firstNote.getStemX();\n const beamThickness = this.render_options.beam_width * this.stem_direction;\n\n // Draw the beams.\n for (let i = 0; i < valid_beam_durations.length; ++i) {\n const duration = valid_beam_durations[i];\n const beamLines = this.getBeamLines(duration);\n\n for (let j = 0; j < beamLines.length; ++j) {\n const beam_line = beamLines[j];\n const startBeamX = beam_line.start;\n\n const startBeamY = this.getSlopeY(startBeamX, firstStemX, beamY, this.slope);\n const lastBeamX = beam_line.end;\n const lastBeamY = this.getSlopeY(lastBeamX, firstStemX, beamY, this.slope);\n\n this.context.beginPath();\n this.context.moveTo(startBeamX, startBeamY);\n this.context.lineTo(startBeamX, startBeamY + beamThickness);\n this.context.lineTo(lastBeamX + 1, lastBeamY + beamThickness);\n this.context.lineTo(lastBeamX + 1, lastBeamY);\n this.context.closePath();\n this.context.fill();\n }\n\n beamY += beamThickness * 1.5;\n }\n }\n\n // Pre-format the beam\n preFormat() { return this; }\n\n // Post-format the beam. This can only be called after\n // the notes in the beam have both `x` and `y` values. ie: they've\n // been formatted and have staves\n postFormat() {\n if (this.postFormatted) return;\n\n // Calculate a smart slope if we're not forcing the beams to be flat.\n if (this.notes[0].getCategory() === 'tabnotes' || this.render_options.flat_beams) {\n this.calculateFlatSlope();\n } else {\n this.calculateSlope();\n }\n this.applyStemExtensions();\n\n this.postFormatted = true;\n }\n\n // Render the beam to the canvas context\n draw() {\n this.checkContext();\n this.setRendered();\n if (this.unbeamable) return;\n\n if (!this.postFormatted) {\n this.postFormat();\n }\n\n this.drawStems();\n this.applyStyle();\n this.drawBeamLines();\n this.restoreStyle();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements the main Voice class. It's mainly a container\n// object to group `Tickables` for formatting.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Flow } from './tables';\nimport { Fraction } from './fraction';\n\nexport class Voice extends Element {\n // Modes allow the addition of ticks in three different ways:\n //\n // STRICT: This is the default. Ticks must fill the voice.\n // SOFT: Ticks can be added without restrictions.\n // FULL: Ticks do not need to fill the voice, but can't exceed the maximum\n // tick length.\n static get Mode() {\n return {\n STRICT: 1,\n SOFT: 2,\n FULL: 3,\n };\n }\n\n constructor(time, options) {\n super();\n this.setAttribute('type', 'Voice');\n\n this.options = {\n softmaxFactor: 100,\n ...options,\n };\n\n // Time signature shortcut: \"4/4\", \"3/8\", etc.\n if (typeof(time) === 'string') {\n const match = time.match(/(\\d+)\\/(\\d+)/);\n if (match) {\n time = {\n num_beats: match[1],\n beat_value: match[2],\n resolution: Flow.RESOLUTION,\n };\n }\n }\n\n // Default time sig is 4/4\n this.time = Vex.Merge({\n num_beats: 4,\n beat_value: 4,\n resolution: Flow.RESOLUTION,\n }, time);\n\n // Recalculate total ticks.\n this.totalTicks = new Fraction(\n this.time.num_beats * (this.time.resolution / this.time.beat_value), 1);\n\n this.resolutionMultiplier = 1;\n\n // Set defaults\n this.tickables = [];\n this.ticksUsed = new Fraction(0, 1);\n this.smallestTickCount = this.totalTicks.clone();\n this.largestTickWidth = 0;\n this.stave = null;\n // Do we care about strictly timed notes\n this.mode = Voice.Mode.STRICT;\n\n // This must belong to a VoiceGroup\n this.voiceGroup = null;\n }\n\n // Get the total ticks in the voice\n getTotalTicks() { return this.totalTicks; }\n\n // Get the total ticks used in the voice by all the tickables\n getTicksUsed() { return this.ticksUsed; }\n\n // Get the largest width of all the tickables\n getLargestTickWidth() { return this.largestTickWidth; }\n\n // Get the tick count for the shortest tickable\n getSmallestTickCount() { return this.smallestTickCount; }\n\n // Get the tickables in the voice\n getTickables() { return this.tickables; }\n\n // Get/set the voice mode, use a value from `Voice.Mode`\n getMode() { return this.mode; }\n setMode(mode) { this.mode = mode; return this; }\n\n // Get the resolution multiplier for the voice\n getResolutionMultiplier() { return this.resolutionMultiplier; }\n\n // Get the actual tick resolution for the voice\n getActualResolution() { return this.resolutionMultiplier * this.time.resolution; }\n\n // Set the voice's stave\n setStave(stave) {\n this.stave = stave;\n this.boundingBox = null; // Reset bounding box so we can reformat\n return this;\n }\n\n // Get the bounding box for the voice\n getBoundingBox() {\n let stave;\n let boundingBox;\n let bb;\n let i;\n\n if (!this.boundingBox) {\n if (!this.stave) throw new Vex.RERR('NoStave', \"Can't get bounding box without stave.\");\n stave = this.stave;\n boundingBox = null;\n\n for (i = 0; i < this.tickables.length; ++i) {\n this.tickables[i].setStave(stave);\n\n bb = this.tickables[i].getBoundingBox();\n if (!bb) continue;\n\n boundingBox = boundingBox ? boundingBox.mergeWith(bb) : bb;\n }\n\n this.boundingBox = boundingBox;\n }\n return this.boundingBox;\n }\n\n // Every tickable must be associated with a voiceGroup. This allows formatters\n // and preformatters to associate them with the right modifierContexts.\n getVoiceGroup() {\n if (!this.voiceGroup) {\n throw new Vex.RERR('NoVoiceGroup', 'No voice group for voice.');\n }\n\n return this.voiceGroup;\n }\n\n // Set the voice group\n setVoiceGroup(g) { this.voiceGroup = g; return this; }\n\n // Set the voice mode to strict or soft\n setStrict(strict) {\n this.mode = strict ? Voice.Mode.STRICT : Voice.Mode.SOFT;\n return this;\n }\n\n // Determine if the voice is complete according to the voice mode\n isComplete() {\n if (this.mode === Voice.Mode.STRICT || this.mode === Voice.Mode.FULL) {\n return this.ticksUsed.equals(this.totalTicks);\n } else {\n return true;\n }\n }\n\n // We use softmax to layout the tickables proportional to the exponent of\n // their duration. The softmax factor is used to determine the 'linearness' of\n // the layout.\n //\n // The softmax of all the tickables in this voice should sum to 1.\n setSoftmaxFactor(factor) {\n this.options.softmaxFactor = factor;\n return this;\n }\n\n // Calculate the sum of the exponents of all the ticks in this voice to use as the denominator\n // of softmax.\n reCalculateExpTicksUsed() {\n const totalTicks = this.ticksUsed.value();\n const exp = (tickable) => Math.pow(this.options.softmaxFactor, tickable.getTicks().value() / totalTicks);\n this.expTicksUsed = this.tickables.map(exp).reduce((a, b) => a + b);\n return this.expTicksUsed;\n }\n\n // Get the softmax-scaled value of a tick duration. 'tickValue' is a number.\n softmax(tickValue) {\n if (!this.expTicksUsed) {\n this.reCalculateExpTicksUsed();\n }\n\n const totalTicks = this.ticksUsed.value();\n const exp = (v) => Math.pow(this.options.softmaxFactor, v / totalTicks);\n return exp(tickValue) / this.expTicksUsed;\n }\n\n // Add a tickable to the voice\n addTickable(tickable) {\n if (!tickable.shouldIgnoreTicks()) {\n const ticks = tickable.getTicks();\n\n // Update the total ticks for this line.\n this.ticksUsed.add(ticks);\n\n if (\n (this.mode === Voice.Mode.STRICT || this.mode === Voice.Mode.FULL) &&\n this.ticksUsed.greaterThan(this.totalTicks)\n ) {\n this.ticksUsed.subtract(ticks);\n throw new Vex.RERR('BadArgument', 'Too many ticks.');\n }\n\n // Track the smallest tickable for formatting.\n if (ticks.lessThan(this.smallestTickCount)) {\n this.smallestTickCount = ticks.clone();\n }\n\n this.resolutionMultiplier = this.ticksUsed.denominator;\n\n // Expand total ticks using denominator from ticks used.\n this.totalTicks.add(0, this.ticksUsed.denominator);\n }\n\n // Add the tickable to the line.\n this.tickables.push(tickable);\n tickable.setVoice(this);\n return this;\n }\n\n // Add an array of tickables to the voice.\n addTickables(tickables) {\n for (let i = 0; i < tickables.length; ++i) {\n this.addTickable(tickables[i]);\n }\n\n return this;\n }\n\n // Preformats the voice by applying the voice's stave to each note.\n preFormat() {\n if (this.preFormatted) return this;\n\n this.tickables.forEach((tickable) => {\n if (!tickable.getStave()) {\n tickable.setStave(this.stave);\n }\n });\n\n this.preFormatted = true;\n return this;\n }\n\n // Render the voice onto the canvas `context` and an optional `stave`.\n // If `stave` is omitted, it is expected that the notes have staves\n // already set.\n draw(context = this.context, stave = this.stave) {\n this.setRendered();\n let boundingBox = null;\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n\n // Set the stave if provided\n if (stave) tickable.setStave(stave);\n\n if (!tickable.getStave()) {\n throw new Vex.RuntimeError(\n 'MissingStave', 'The voice cannot draw tickables without staves.'\n );\n }\n\n if (i === 0) boundingBox = tickable.getBoundingBox();\n\n if (i > 0 && boundingBox) {\n const tickable_bb = tickable.getBoundingBox();\n if (tickable_bb) boundingBox.mergeWith(tickable_bb);\n }\n\n tickable.setContext(context);\n tickable.drawWithStyle();\n }\n\n this.boundingBox = boundingBox;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Flow } from './tables';\nimport { Glyph } from './glyph';\n\nfunction drawBoldDoubleLine(ctx, type, topX, topY, botY) {\n if (\n type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n type !== StaveConnector.type.BOLD_DOUBLE_RIGHT\n ) {\n throw new Vex.RERR(\n 'InvalidConnector', 'A REPEAT_BEGIN or REPEAT_END type must be provided.'\n );\n }\n\n let x_shift = 3;\n let variableWidth = 3.5; // Width for avoiding anti-aliasing width issues\n const thickLineOffset = 2; // For aesthetics\n\n if (type === StaveConnector.type.BOLD_DOUBLE_RIGHT) {\n x_shift = -5; // Flips the side of the thin line\n variableWidth = 3;\n }\n\n // Thin line\n ctx.fillRect(topX + x_shift, topY, 1, botY - topY);\n // Thick line\n ctx.fillRect(topX - thickLineOffset, topY, variableWidth, botY - topY);\n}\n\nexport class StaveConnector extends Element {\n // SINGLE_LEFT and SINGLE are the same value for compatibility\n // with older versions of vexflow which didn't have right sided\n // stave connectors\n static get type() {\n return {\n SINGLE_RIGHT: 0,\n SINGLE_LEFT: 1,\n SINGLE: 1,\n DOUBLE: 2,\n BRACE: 3,\n BRACKET: 4,\n BOLD_DOUBLE_LEFT: 5,\n BOLD_DOUBLE_RIGHT: 6,\n THIN_DOUBLE: 7,\n NONE: 8,\n };\n }\n\n static get typeString() {\n return {\n singleRight: StaveConnector.type.SINGLE_RIGHT,\n singleLeft: StaveConnector.type.SINGLE_LEFT,\n single: StaveConnector.type.SINGLE,\n double: StaveConnector.type.DOUBLE,\n brace: StaveConnector.type.BRACE,\n bracket: StaveConnector.type.BRACKET,\n boldDoubleLeft: StaveConnector.type.BOLD_DOUBLE_LEFT,\n boldDoubleRight: StaveConnector.type.BOLD_DOUBLE_RIGHT,\n thinDouble: StaveConnector.type.THIN_DOUBLE,\n none: StaveConnector.type.NONE,\n };\n }\n\n constructor(top_stave, bottom_stave) {\n super();\n this.setAttribute('type', 'StaveConnector');\n\n this.thickness = Flow.STAVE_LINE_THICKNESS;\n this.width = 3;\n this.top_stave = top_stave;\n this.bottom_stave = bottom_stave;\n this.type = StaveConnector.type.DOUBLE;\n this.font = {\n family: 'times',\n size: 16,\n weight: 'normal',\n };\n // 1. Offset Bold Double Left to align with offset Repeat Begin bars\n // 2. Offset BRACE type not to overlap with another StaveConnector\n this.x_shift = 0;\n this.texts = [];\n }\n\n setType(type) {\n type = typeof(type) === 'string'\n ? StaveConnector.typeString[type]\n : type;\n\n if (type >= StaveConnector.type.SINGLE_RIGHT && type <= StaveConnector.type.NONE) {\n this.type = type;\n }\n return this;\n }\n\n setText(text, options) {\n this.texts.push({\n content: text,\n options: Vex.Merge({ shift_x: 0, shift_y: 0 }, options),\n });\n return this;\n }\n\n setFont(font) {\n Vex.Merge(this.font, font);\n }\n\n setXShift(x_shift) {\n if (typeof x_shift !== 'number') {\n throw Vex.RERR('InvalidType', 'x_shift must be a Number');\n }\n\n this.x_shift = x_shift;\n return this;\n }\n\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n\n let topY = this.top_stave.getYForLine(0);\n let botY = this.bottom_stave.getYForLine(this.bottom_stave.getNumLines() - 1) +\n this.thickness;\n let width = this.width;\n let topX = this.top_stave.getX();\n\n const isRightSidedConnector = (\n this.type === StaveConnector.type.SINGLE_RIGHT ||\n this.type === StaveConnector.type.BOLD_DOUBLE_RIGHT ||\n this.type === StaveConnector.type.THIN_DOUBLE\n );\n\n if (isRightSidedConnector) {\n topX = this.top_stave.getX() + this.top_stave.width;\n }\n\n let attachment_height = botY - topY;\n switch (this.type) {\n case StaveConnector.type.SINGLE:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_LEFT:\n width = 1;\n break;\n case StaveConnector.type.SINGLE_RIGHT:\n width = 1;\n break;\n case StaveConnector.type.DOUBLE:\n topX -= (this.width + 2);\n topY -= this.thickness;\n attachment_height += 0.5;\n break;\n case StaveConnector.type.BRACE: {\n width = 12;\n // May need additional code to draw brace\n const x1 = this.top_stave.getX() - 2 + this.x_shift;\n const y1 = topY;\n const x3 = x1;\n const y3 = botY;\n const x2 = x1 - width;\n const y2 = y1 + attachment_height / 2.0;\n const cpx1 = x2 - (0.90 * width);\n const cpy1 = y1 + (0.2 * attachment_height);\n const cpx2 = x1 + (1.10 * width);\n const cpy2 = y2 - (0.135 * attachment_height);\n const cpx3 = cpx2;\n const cpy3 = y2 + (0.135 * attachment_height);\n const cpx4 = cpx1;\n const cpy4 = y3 - (0.2 * attachment_height);\n const cpx5 = x2 - width;\n const cpy5 = cpy4;\n const cpx6 = x1 + (0.40 * width);\n const cpy6 = y2 + (0.135 * attachment_height);\n const cpx7 = cpx6;\n const cpy7 = y2 - (0.135 * attachment_height);\n const cpx8 = cpx5;\n const cpy8 = cpy1;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, x2, y2);\n ctx.bezierCurveTo(cpx3, cpy3, cpx4, cpy4, x3, y3);\n ctx.bezierCurveTo(cpx5, cpy5, cpx6, cpy6, x2, y2);\n ctx.bezierCurveTo(cpx7, cpy7, cpx8, cpy8, x1, y1);\n ctx.fill();\n ctx.stroke();\n break;\n } case StaveConnector.type.BRACKET:\n topY -= 6;\n botY += 6;\n attachment_height = botY - topY;\n Glyph.renderGlyph(ctx, topX - 5, topY, 40, 'bracketTop');\n Glyph.renderGlyph(ctx, topX - 5, botY, 40, 'bracketBottom');\n topX -= (this.width + 2);\n break;\n case StaveConnector.type.BOLD_DOUBLE_LEFT:\n drawBoldDoubleLine(ctx, this.type, topX + this.x_shift, topY, botY - this.thickness);\n break;\n case StaveConnector.type.BOLD_DOUBLE_RIGHT:\n drawBoldDoubleLine(ctx, this.type, topX, topY, botY - this.thickness);\n break;\n case StaveConnector.type.THIN_DOUBLE:\n width = 1;\n attachment_height -= this.thickness;\n break;\n case StaveConnector.type.NONE:\n break;\n default:\n throw new Vex.RERR(\n 'InvalidType', `The provided StaveConnector.type (${this.type}) is invalid`\n );\n }\n\n if (\n this.type !== StaveConnector.type.BRACE &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_LEFT &&\n this.type !== StaveConnector.type.BOLD_DOUBLE_RIGHT &&\n this.type !== StaveConnector.type.NONE\n ) {\n ctx.fillRect(topX, topY, width, attachment_height);\n }\n\n // If the connector is a thin double barline, draw the paralell line\n if (this.type === StaveConnector.type.THIN_DOUBLE) {\n ctx.fillRect(topX - 3, topY, width, attachment_height);\n }\n\n ctx.save();\n ctx.lineWidth = 2;\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n // Add stave connector text\n for (let i = 0; i < this.texts.length; i++) {\n const text = this.texts[i];\n const text_width = ctx.measureText('' + text.content).width;\n const x = this.top_stave.getX() - text_width - 24 + text.options.shift_x;\n const y = (this.top_stave.getYForLine(0) + this.bottom_stave.getBottomLineY()) / 2 +\n text.options.shift_y;\n\n ctx.fillText('' + text.content, x, y + 4);\n }\n ctx.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// The tickable interface. Tickables are things that sit on a score and\n// have a duration, i.e., they occupy space in the musical rendering dimension.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Flow } from './tables';\nimport { Fraction } from './fraction';\n\nexport class Tickable extends Element {\n constructor() {\n super();\n this.setAttribute('type', 'Tickable');\n\n // These properties represent the duration of\n // this tickable element.\n this.ticks = new Fraction(0, 1); // Fractional value of ticks\n this.intrinsicTicks = 0; // Floating point value of ticks\n this.tickMultiplier = new Fraction(1, 1);\n\n // Formatter metrics\n this.width = 0;\n this.x_shift = 0; // Shift from tick context\n\n this.voice = null;\n this.tickContext = null;\n this.modifierContext = null;\n this.modifiers = [];\n this.preFormatted = false;\n this.postFormatted = false;\n this.tuplet = null;\n this.tupletStack = [];\n\n this.align_center = false;\n this.center_x_shift = 0; // Shift from tick context if center aligned\n\n // This flag tells the formatter to ignore this tickable during\n // formatting and justification. It is set by tickables such as BarNote.\n this.ignore_ticks = false;\n\n // This is a space for an external formatting class or function to maintain\n // metrics.\n this.formatterMetrics = {\n // The freedom of a tickable is the distance it can move without colliding\n // with neighboring elements. A formatter can set these values during its\n // formatting pass, which a different formatter can then use to fine tune.\n freedom: { left: 0, right: 0 },\n\n // The simplified rational duration of this tick as a string. It can be\n // used as an index to a map or hashtable.\n duration: '',\n\n // The number of formatting iterations undergone.\n iterations: 0,\n\n // The space in pixels allocated by this formatter, along with the mean space\n // for tickables of this duration, and the deviation from the mean.\n space: {\n used: 0,\n mean: 0,\n deviation: 0,\n },\n };\n }\n\n reset() { return this; }\n\n getTicks() { return this.ticks; }\n shouldIgnoreTicks() { return this.ignore_ticks; }\n\n // Get and set width of note. Used by the formatter for positioning.\n setWidth(width) { this.width = width; }\n getWidth() {\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call GetWidth on an unformatted note.\");\n }\n\n return this.width + (this.modifierContext ? this.modifierContext.getWidth() : 0);\n }\n\n // Displace note by `x` pixels. Used by the formatter.\n setXShift(x) { this.x_shift = x; return this; }\n getXShift() { return this.x_shift; }\n\n // Get `X` position of this tick context.\n getX() {\n if (!this.tickContext) {\n throw new Vex.RERR('NoTickContext', 'Note needs a TickContext assigned for an X-Value');\n }\n\n return this.tickContext.getX() + this.x_shift;\n }\n\n\n getFormatterMetrics() { return this.formatterMetrics; }\n\n getCenterXShift() {\n if (this.isCenterAligned()) {\n return this.center_x_shift;\n }\n\n return 0;\n }\n isCenterAligned() { return this.align_center; }\n setCenterAlignment(align_center) {\n this.align_center = align_center;\n return this;\n }\n\n // Every tickable must be associated with a voice. This allows formatters\n // and preFormatter to associate them with the right modifierContexts.\n getVoice() {\n if (!this.voice) throw new Vex.RERR('NoVoice', 'Tickable has no voice.');\n return this.voice;\n }\n setVoice(voice) { this.voice = voice; }\n getTuplet() { return this.tuplet; }\n\n /*\n * resetTuplet\n * @param tuplet -- the specific tuplet to reset\n * if this is not provided, all tuplets are reset.\n * @returns this\n *\n * Removes any prior tuplets from the tick calculation and\n * resets the intrinsic tick value to\n */\n resetTuplet(tuplet) {\n let noteCount;\n let notesOccupied;\n if (tuplet) {\n const i = this.tupletStack.indexOf(tuplet);\n if (i !== -1) {\n this.tupletStack.splice(i, 1);\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n\n while (this.tupletStack.length) {\n tuplet = this.tupletStack.pop();\n noteCount = tuplet.getNoteCount();\n notesOccupied = tuplet.getNotesOccupied();\n\n // Revert old multiplier by inverting numerator & denom.:\n this.applyTickMultiplier(noteCount, notesOccupied);\n }\n return this;\n }\n\n setTuplet(tuplet) {\n // Attach to new tuplet\n\n if (tuplet) {\n this.tupletStack.push(tuplet);\n\n const noteCount = tuplet.getNoteCount();\n const notesOccupied = tuplet.getNotesOccupied();\n\n this.applyTickMultiplier(notesOccupied, noteCount);\n }\n\n this.tuplet = tuplet;\n\n return this;\n }\n\n /** optional, if tickable has modifiers **/\n addToModifierContext(mc) {\n this.modifierContext = mc;\n // Add modifiers to modifier context (if any)\n this.preFormatted = false;\n }\n\n /** optional, if tickable has modifiers **/\n addModifier(mod) {\n this.modifiers.push(mod);\n this.preFormatted = false;\n return this;\n }\n getModifiers() {\n return this.modifiers;\n }\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n }\n preFormat() {\n if (this.preFormatted) return;\n\n this.width = 0;\n if (this.modifierContext) {\n this.modifierContext.preFormat();\n this.width += this.modifierContext.getWidth();\n }\n }\n postFormat() {\n if (this.postFormatted) return this;\n this.postFormatted = true;\n return this;\n }\n getIntrinsicTicks() {\n return this.intrinsicTicks;\n }\n setIntrinsicTicks(intrinsicTicks) {\n this.intrinsicTicks = intrinsicTicks;\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n getTickMultiplier() {\n return this.tickMultiplier;\n }\n applyTickMultiplier(numerator, denominator) {\n this.tickMultiplier.multiply(numerator, denominator);\n this.ticks = this.tickMultiplier.clone().multiply(this.intrinsicTicks);\n }\n setDuration(duration) {\n const ticks = duration.numerator * (Flow.RESOLUTION / duration.denominator);\n this.ticks = this.tickMultiplier.clone().multiply(ticks);\n this.intrinsicTicks = this.ticks.value();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements an abstract interface for notes and chords that\n// are rendered on a stave. Notes have some common properties: All of them\n// have a value (e.g., pitch, fret, etc.) and a duration (quarter, half, etc.)\n//\n// Some notes have stems, heads, dots, etc. Most notational elements that\n// surround a note are called *modifiers*, and every note has an associated\n// array of them. All notes also have a rendering context and belong to a stave.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Tickable } from './tickable';\n\nexport class Note extends Tickable {\n static get CATEGORY() { return 'note'; }\n\n // Debug helper. Displays various note metrics for the given\n // note.\n static plotMetrics(ctx, note, yPos) {\n const metrics = note.getMetrics();\n const xStart = note.getAbsoluteX() - metrics.modLeftPx - metrics.leftDisplacedHeadPx;\n const xPre1 = note.getAbsoluteX() - metrics.leftDisplacedHeadPx;\n const xAbs = note.getAbsoluteX();\n const xPost1 = note.getAbsoluteX() + metrics.notePx;\n const xPost2 = note.getAbsoluteX() + metrics.notePx + metrics.rightDisplacedHeadPx;\n const xEnd = note.getAbsoluteX()\n + metrics.notePx\n + metrics.rightDisplacedHeadPx\n + metrics.modRightPx;\n const xFreedomRight = xEnd + (note.getFormatterMetrics().freedom.right || 0);\n\n const xWidth = xEnd - xStart;\n ctx.save();\n ctx.setFont('Arial', 8, '');\n ctx.fillText(Math.round(xWidth) + 'px', xStart + note.getXShift(), yPos);\n\n const y = (yPos + 7);\n function stroke(x1, x2, color, yy = y) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(3);\n ctx.moveTo(x1 + note.getXShift(), yy);\n ctx.lineTo(x2 + note.getXShift(), yy);\n ctx.stroke();\n }\n\n stroke(xStart, xPre1, 'red');\n stroke(xPre1, xAbs, '#999');\n stroke(xAbs, xPost1, 'green');\n stroke(xPost1, xPost2, '#999');\n stroke(xPost2, xEnd, 'red');\n stroke(xEnd, xFreedomRight, '#DD0');\n stroke(xStart - note.getXShift(), xStart, '#BBB'); // Shift\n Vex.drawDot(ctx, xAbs + note.getXShift(), y, 'blue');\n\n const formatterMetrics = note.getFormatterMetrics();\n if (formatterMetrics.iterations > 0) {\n const spaceDeviation = formatterMetrics.space.deviation;\n const prefix = spaceDeviation >= 0 ? '+' : '';\n ctx.setFillStyle('red');\n ctx.fillText(prefix + Math.round(spaceDeviation),\n xAbs + note.getXShift(), yPos - 10);\n }\n ctx.restore();\n }\n\n static parseDuration(durationString) {\n if (typeof (durationString) !== 'string') { return null; }\n\n const regexp = /(\\d*\\/?\\d+|[a-z])(d*)([nrhms]|$)/;\n const result = regexp.exec(durationString);\n if (!result) { return null; }\n\n const duration = result[1];\n const dots = result[2].length;\n const type = result[3] || 'n';\n\n return { duration, dots, type };\n }\n\n static parseNoteStruct(noteStruct) {\n const durationString = noteStruct.duration;\n const customTypes = [];\n\n // Preserve backwards-compatibility\n const durationProps = Note.parseDuration(durationString);\n if (!durationProps) { return null; }\n\n // If specified type is invalid, return null\n let type = noteStruct.type;\n if (type && !Flow.getGlyphProps.validTypes[type]) { return null; }\n\n\n // If no type specified, check duration or custom types\n if (!type) {\n type = durationProps.type || 'n';\n\n // If we have keys, try and check if we've got a custom glyph\n if (noteStruct.keys !== undefined) {\n noteStruct.keys.forEach((k, i) => {\n const result = k.split('/');\n // We have a custom glyph specified after the note eg. /X2\n customTypes[i] = (result && result.length === 3) ? result[2] : type;\n });\n }\n }\n\n // Calculate the tick duration of the note\n let ticks = Flow.durationToTicks(durationProps.duration);\n if (ticks == null) { return null; }\n\n // Are there any dots?\n const dots = noteStruct.dots ? noteStruct.dots : durationProps.dots;\n if (typeof (dots) !== 'number') { return null; }\n\n // Add ticks as necessary depending on the numbr of dots\n let currentTicks = ticks;\n for (let i = 0; i < dots; i++) {\n if (currentTicks <= 1) return null;\n\n currentTicks = currentTicks / 2;\n ticks += currentTicks;\n }\n\n return {\n duration: durationProps.duration,\n type,\n customTypes,\n dots,\n ticks,\n };\n }\n\n\n // Every note is a tickable, i.e., it can be mutated by the `Formatter` class for\n // positioning and layout.\n // To create a new note you need to provide a `noteStruct`, which consists\n // of the following fields:\n //\n // `type`: The note type (e.g., `r` for rest, `s` for slash notes, etc.)\n // `dots`: The number of dots, which affects the duration.\n // `duration`: The time length (e.g., `q` for quarter, `h` for half, `8` for eighth etc.)\n //\n // The range of values for these parameters are available in `src/tables.js`.\n constructor(noteStruct) {\n super();\n this.setAttribute('type', 'Note');\n\n if (!noteStruct) {\n throw new Vex.RuntimeError(\n 'BadArguments', 'Note must have valid initialization data to identify duration and type.'\n );\n }\n\n // Parse `noteStruct` and get note properties.\n const initStruct = Note.parseNoteStruct(noteStruct);\n if (!initStruct) {\n throw new Vex.RuntimeError(\n 'BadArguments', `Invalid note initialization object: ${JSON.stringify(noteStruct)}`\n );\n }\n\n // Set note properties from parameters.\n this.duration = initStruct.duration;\n this.dots = initStruct.dots;\n this.noteType = initStruct.type;\n this.customTypes = initStruct.customTypes;\n\n if (noteStruct.duration_override) {\n // Custom duration\n this.setDuration(noteStruct.duration_override);\n } else {\n // Default duration\n this.setIntrinsicTicks(initStruct.ticks);\n }\n\n this.modifiers = [];\n\n // Get the glyph code for this note from the font.\n this.glyph = Flow.getGlyphProps(this.duration, this.noteType);\n this.customGlyphs = this.customTypes.map(t => Flow.getGlyphProps(this.duration, t));\n\n if (this.positions && (typeof (this.positions) !== 'object' || !this.positions.length)) {\n throw new Vex.RuntimeError('BadArguments', 'Note keys must be array type.');\n }\n\n // Note to play for audio players.\n this.playNote = null;\n\n // Positioning contexts used by the Formatter.\n this.tickContext = null; // The current tick context.\n this.modifierContext = null;\n this.ignore_ticks = false;\n\n // Positioning variables\n this.width = 0; // Width in pixels calculated after preFormat\n this.leftDisplacedHeadPx = 0; // Extra room on left for displaced note head\n this.rightDisplacedHeadPx = 0; // Extra room on right for displaced note head\n this.x_shift = 0; // X shift from tick context X\n this.voice = null; // The voice that this note is in\n this.preFormatted = false; // Is this note preFormatted?\n this.ys = []; // list of y coordinates for each note\n // we need to hold on to these for ties and beams.\n\n if (noteStruct.align_center) {\n this.setCenterAlignment(noteStruct.align_center);\n }\n\n // The render surface.\n this.stave = null;\n this.render_options = {\n annotation_spacing: 5,\n };\n }\n\n // Get and set the play note, which is arbitrary data that can be used by an\n // audio player.\n getPlayNote() { return this.playNote; }\n setPlayNote(note) { this.playNote = note; return this; }\n\n // Don't play notes by default, call them rests. This is also used by things like\n // beams and dots for positioning.\n isRest() { return false; }\n\n // TODO(0xfe): Why is this method here?\n addStroke(index, stroke) {\n stroke.setNote(this);\n stroke.setIndex(index);\n this.modifiers.push(stroke);\n this.setPreFormatted(false);\n return this;\n }\n\n // Get and set the target stave.\n getStave() { return this.stave; }\n setStave(stave) {\n this.stave = stave;\n this.setYs([stave.getYForLine(0)]); // Update Y values if the stave is changed.\n this.context = this.stave.context;\n return this;\n }\n\n // `Note` is not really a modifier, but is used in\n // a `ModifierContext`.\n getCategory() { return Note.CATEGORY; }\n\n // Set the rendering context for the note.\n setContext(context) { this.context = context; return this; }\n\n // Get and set spacing to the left and right of the notes.\n getLeftDisplacedHeadPx() { return this.leftDisplacedHeadPx; }\n getRightDisplacedHeadPx() { return this.rightDisplacedHeadPx; }\n setLeftDisplacedHeadPx(x) { this.leftDisplacedHeadPx = x; return this; }\n setRightDisplacedHeadPx(x) { this.rightDisplacedHeadPx = x; return this; }\n\n // Returns true if this note has no duration (e.g., bar notes, spacers, etc.)\n shouldIgnoreTicks() { return this.ignore_ticks; }\n\n // Get the stave line number for the note.\n getLineNumber() { return 0; }\n\n // Get the stave line number for rest.\n getLineForRest() { return 0; }\n\n // Get the glyph associated with this note.\n getGlyph() { return this.glyph; }\n\n getGlyphWidth() {\n // TODO: FIXME (multiple potential values for this.glyph)\n if (this.glyph) {\n if (this.glyph.getMetrics) {\n return this.glyph.getMetrics().width;\n } else if (this.glyph.getWidth) {\n return this.glyph.getWidth(this.render_options.glyph_font_scale);\n }\n }\n\n return 0;\n }\n\n // Set and get Y positions for this note. Each Y value is associated with\n // an individual pitch/key within the note/chord.\n setYs(ys) { this.ys = ys; return this; }\n getYs() {\n if (this.ys.length === 0) {\n throw new Vex.RERR('NoYValues', 'No Y-values calculated for this note.');\n }\n\n return this.ys;\n }\n\n // Get the Y position of the space above the stave onto which text can\n // be rendered.\n getYForTopText(text_line) {\n if (!this.stave) {\n throw new Vex.RERR('NoStave', 'No stave attached to this note.');\n }\n\n return this.stave.getYForTopText(text_line);\n }\n\n // Get a `BoundingBox` for this note.\n getBoundingBox() { return null; }\n\n // Returns the voice that this note belongs in.\n getVoice() {\n if (!this.voice) throw new Vex.RERR('NoVoice', 'Note has no voice.');\n return this.voice;\n }\n\n // Attach this note to `voice`.\n setVoice(voice) {\n this.voice = voice;\n this.preFormatted = false;\n return this;\n }\n\n // Get and set the `TickContext` for this note.\n getTickContext() { return this.tickContext; }\n setTickContext(tc) {\n this.tickContext = tc;\n this.preFormatted = false;\n return this;\n }\n\n // Accessors for the note type.\n getDuration() { return this.duration; }\n isDotted() { return (this.dots > 0); }\n hasStem() { return false; }\n getDots() { return this.dots; }\n getNoteType() { return this.noteType; }\n setBeam() { return this; } // ignore parameters\n\n // Attach this note to a modifier context.\n setModifierContext(mc) { this.modifierContext = mc; return this; }\n\n // Attach a modifier to this note.\n addModifier(modifier, index = 0) {\n modifier.setNote(this);\n modifier.setIndex(index);\n this.modifiers.push(modifier);\n this.setPreFormatted(false);\n return this;\n }\n\n // Get the coordinates for where modifiers begin.\n getModifierStartXY() {\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n\n return {\n x: this.getAbsoluteX(),\n y: this.ys[0],\n };\n }\n\n // Get bounds and metrics for this note.\n //\n // Returns a struct with fields:\n // `width`: The total width of the note (including modifiers.)\n // `notePx`: The width of the note head only.\n // `left_shift`: The horizontal displacement of the note.\n // `modLeftPx`: Start `X` for left modifiers.\n // `modRightPx`: Start `X` for right modifiers.\n // `leftDisplacedHeadPx`: Extra space on left of note.\n // `rightDisplacedHeadPx`: Extra space on right of note.\n getMetrics() {\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call getMetrics on an unformatted note.\");\n }\n\n const modLeftPx = this.modifierContext ? this.modifierContext.state.left_shift : 0;\n const modRightPx = this.modifierContext ? this.modifierContext.state.right_shift : 0;\n const width = this.getWidth();\n const glyphWidth = this.getGlyphWidth();\n const notePx = width\n - modLeftPx // subtract left modifiers\n - modRightPx // subtract right modifiers\n - this.leftDisplacedHeadPx // subtract left displaced head\n - this.rightDisplacedHeadPx; // subtract right displaced head\n\n return {\n // ----------\n // NOTE: If you change this, remember to update MockTickable in the tests/ directory.\n // --------------\n width,\n glyphWidth,\n notePx,\n\n // Modifier spacing.\n modLeftPx,\n modRightPx,\n\n // Displaced note head on left or right.\n leftDisplacedHeadPx: this.leftDisplacedHeadPx,\n rightDisplacedHeadPx: this.rightDisplacedHeadPx,\n };\n }\n\n // Get the absolute `X` position of this note's tick context. This\n // excludes x_shift, so you'll need to factor it in if you're\n // looking for the post-formatted x-position.\n getAbsoluteX() {\n if (!this.tickContext) {\n throw new Vex.RERR('NoTickContext', 'Note needs a TickContext assigned for an X-Value');\n }\n\n // Position note to left edge of tick context.\n let x = this.tickContext.getX();\n if (this.stave) {\n x += this.stave.getNoteStartX() + this.musicFont.lookupMetric('stave.padding');\n }\n\n if (this.isCenterAligned()) {\n x += this.getCenterXShift();\n }\n\n return x;\n }\n\n setPreFormatted(value) {\n this.preFormatted = value;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `NoteHeads`. `NoteHeads` are typically not manipulated\n// directly, but used internally in `StaveNote`.\n//\n// See `tests/notehead_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Note } from './note';\nimport { Stem } from './stem';\nimport { StaveNote } from './stavenote';\nimport { Glyph } from './glyph';\n\n// To enable logging for this class. Set `Vex.Flow.NoteHead.DEBUG` to `true`.\nfunction L(...args) { if (NoteHead.DEBUG) Vex.L('Vex.Flow.NoteHead', args); }\n\n// Draw slashnote head manually. No glyph exists for this.\n//\n// Parameters:\n// * `ctx`: the Canvas context\n// * `duration`: the duration of the note. ex: \"4\"\n// * `x`: the x coordinate to draw at\n// * `y`: the y coordinate to draw at\n// * `stem_direction`: the direction of the stem\nfunction drawSlashNoteHead(ctx, duration, x, y, stem_direction, staveSpace) {\n const width = Flow.SLASH_NOTEHEAD_WIDTH;\n ctx.save();\n ctx.setLineWidth(Flow.STEM_WIDTH);\n\n let fill = false;\n\n if (Flow.durationToNumber(duration) > 2) {\n fill = true;\n }\n\n if (!fill) x -= (Flow.STEM_WIDTH / 2) * stem_direction;\n\n ctx.beginPath();\n ctx.moveTo(x, y + staveSpace);\n ctx.lineTo(x, y + 1);\n ctx.lineTo(x + width, y - staveSpace);\n ctx.lineTo(x + width, y);\n ctx.lineTo(x, y + staveSpace);\n ctx.closePath();\n\n if (fill) {\n ctx.fill();\n } else {\n ctx.stroke();\n }\n\n if (Flow.durationToFraction(duration).equals(0.5)) {\n const breve_lines = [-3, -1, width + 1, width + 3];\n for (let i = 0; i < breve_lines.length; i++) {\n ctx.beginPath();\n ctx.moveTo(x + breve_lines[i], y - 10);\n ctx.lineTo(x + breve_lines[i], y + 11);\n ctx.stroke();\n }\n }\n\n ctx.restore();\n}\n\nexport class NoteHead extends Note {\n static get CATEGORY() { return 'notehead'; }\n\n constructor(head_options) {\n super(head_options);\n this.setAttribute('type', 'NoteHead');\n\n this.index = head_options.index;\n this.x = head_options.x || 0;\n this.y = head_options.y || 0;\n this.note_type = head_options.note_type;\n this.duration = head_options.duration;\n this.displaced = head_options.displaced || false;\n this.stem_direction = head_options.stem_direction || StaveNote.STEM_UP;\n this.line = head_options.line;\n\n // Get glyph code based on duration and note type. This could be\n // regular notes, rests, or other custom codes.\n this.glyph = Flow.getGlyphProps(this.duration, this.note_type);\n if (!this.glyph) {\n throw new Vex.RuntimeError(\n 'BadArguments',\n `No glyph found for duration '${this.duration}' and type '${this.note_type}'`);\n }\n\n this.glyph_code = this.glyph.code_head;\n this.x_shift = head_options.x_shift || 0;\n if (head_options.custom_glyph_code) {\n this.custom_glyph = true;\n this.glyph_code = head_options.custom_glyph_code;\n this.stem_up_x_offset = head_options.stem_up_x_offset || 0;\n this.stem_down_x_offset = head_options.stem_down_x_offset || 0;\n }\n\n this.style = head_options.style;\n this.slashed = head_options.slashed;\n\n Vex.Merge(this.render_options, {\n // font size for note heads\n glyph_font_scale: head_options.glyph_font_scale || Flow.DEFAULT_NOTATION_FONT_SCALE,\n // number of stroke px to the left and right of head\n stroke_px: 3,\n });\n\n this.setWidth(this.glyph.getWidth(this.render_options.glyph_font_scale));\n }\n\n getCategory() { return NoteHead.CATEGORY; }\n\n // Get the width of the notehead\n getWidth() { return this.width; }\n\n // Determine if the notehead is displaced\n isDisplaced() { return this.displaced === true; }\n\n // Get the glyph data\n getGlyph() { return this.glyph; }\n\n // Set the X coordinate\n setX(x) { this.x = x; return this; }\n\n // get/set the Y coordinate\n getY() { return this.y; }\n setY(y) { this.y = y; return this; }\n\n // Get/set the stave line the notehead is placed on\n getLine() { return this.line; }\n setLine(line) { this.line = line; return this; }\n\n // Get the canvas `x` coordinate position of the notehead.\n getAbsoluteX() {\n // If the note has not been preformatted, then get the static x value\n // Otherwise, it's been formatted and we should use it's x value relative\n // to its tick context\n const x = !this.preFormatted ? this.x : super.getAbsoluteX();\n\n // For a more natural displaced notehead, we adjust the displacement amount\n // by half the stem width in order to maintain a slight overlap with the stem\n const displacementStemAdjustment = (Stem.WIDTH / 2);\n const fontShift = this.musicFont.lookupMetric('notehead.shiftX', 0) * this.stem_direction;\n const displacedFontShift = this.musicFont.lookupMetric('noteHead.displaced.shiftX', 0) * this.stem_direction;\n\n return x + fontShift + (this.displaced\n ? ((this.width - displacementStemAdjustment) * this.stem_direction) + displacedFontShift\n : 0\n );\n }\n\n // Get the `BoundingBox` for the `NoteHead`\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n\n const spacing = this.stave.getSpacingBetweenLines();\n const half_spacing = spacing / 2;\n const min_y = this.y - half_spacing;\n\n return new Flow.BoundingBox(this.getAbsoluteX(), min_y, this.width, spacing);\n }\n\n // Set notehead to a provided `stave`\n setStave(stave) {\n const line = this.getLine();\n\n this.stave = stave;\n this.setY(stave.getYForNote(line));\n this.context = this.stave.context;\n return this;\n }\n\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted) return this;\n\n const width = this.getWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n\n this.setWidth(width);\n this.setPreFormatted(true);\n return this;\n }\n\n // Draw the notehead\n draw() {\n this.checkContext();\n this.setRendered();\n\n const ctx = this.context;\n let head_x = this.getAbsoluteX();\n if (this.custom_glyph) {\n // head_x += this.x_shift;\n head_x += this.stem_direction === Stem.UP ? this.stem_up_x_offset : this.stem_down_x_offset;\n }\n\n const y = this.y;\n\n L(\"Drawing note head '\", this.note_type, this.duration, \"' at\", head_x, y);\n\n // Begin and end positions for head.\n const stem_direction = this.stem_direction;\n const glyph_font_scale = this.render_options.glyph_font_scale;\n\n if (this.style) {\n this.applyStyle(ctx);\n }\n\n const categorySuffix = `${this.glyph_code}Stem${stem_direction === Stem.UP ? 'Up' : 'Down'}`;\n if (this.note_type === 's') {\n const staveSpace = this.stave.getSpacingBetweenLines();\n drawSlashNoteHead(ctx, this.duration, head_x, y, stem_direction, staveSpace);\n } else {\n Glyph.renderGlyph(ctx, head_x, y, glyph_font_scale, this.glyph_code, {\n font: this.musicFont,\n category: this.custom_glyph ? `noteHead.custom.${categorySuffix}` : `noteHead.standard.${categorySuffix}`\n });\n }\n\n if (this.style) {\n this.restoreStyle(ctx);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `StemmableNote` is an abstract interface for notes with optional stems.\n// Examples of stemmable notes are `StaveNote` and `TabNote`\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Stem } from './stem';\nimport { Glyph } from './glyph';\nimport { Note } from './note';\n\nexport class StemmableNote extends Note {\n constructor(note_struct) {\n super(note_struct);\n this.setAttribute('type', 'StemmableNote');\n\n this.stem = null;\n this.stemExtensionOverride = null;\n this.beam = null;\n }\n\n // Get and set the note's `Stem`\n getStem() { return this.stem; }\n setStem(stem) { this.stem = stem; return this; }\n\n // Builds and sets a new stem\n buildStem() {\n const stem = new Stem();\n this.setStem(stem);\n return this;\n }\n\n buildFlag(category = 'flag') {\n const { glyph, beam } = this;\n const shouldRenderFlag = beam === null;\n\n if (glyph && glyph.flag && shouldRenderFlag) {\n const flagCode = this.getStemDirection() === Stem.DOWN\n ? glyph.code_flag_downstem\n : glyph.code_flag_upstem;\n\n this.flag = new Glyph(flagCode, this.render_options.glyph_font_scale, { category });\n }\n }\n\n // Get the custom glyph associated with the outer note head on the base of the stem.\n getBaseCustomNoteHeadGlyph() {\n if (this.getStemDirection() === Stem.DOWN) {\n return this.customGlyphs[this.customGlyphs.length - 1];\n } else {\n return this.customGlyphs[0];\n }\n }\n\n // Get the full length of stem\n getStemLength() {\n return Stem.HEIGHT + this.getStemExtension();\n }\n\n // Get the number of beams for this duration\n getBeamCount() {\n const glyph = this.getGlyph();\n\n if (glyph) {\n return glyph.beam_count;\n } else {\n return 0;\n }\n }\n\n // Get the minimum length of stem\n getStemMinumumLength() {\n const frac = Flow.durationToFraction(this.duration);\n let length = frac.value() <= 1 ? 0 : 20;\n // if note is flagged, cannot shorten beam\n switch (this.duration) {\n case '8':\n if (this.beam == null) length = 35;\n break;\n case '16':\n length = this.beam == null ? 35 : 25;\n break;\n case '32':\n length = this.beam == null ? 45 : 35;\n break;\n case '64':\n length = this.beam == null ? 50 : 40;\n break;\n case '128':\n length = this.beam == null ? 55 : 45;\n break;\n default:\n break;\n }\n return length;\n }\n\n // Get/set the direction of the stem\n getStemDirection() { return this.stem_direction; }\n setStemDirection(direction) {\n if (!direction) direction = Stem.UP;\n if (direction !== Stem.UP && direction !== Stem.DOWN) {\n throw new Vex.RERR('BadArgument', `Invalid stem direction: ${direction}`);\n }\n\n this.stem_direction = direction;\n\n if (this.stem) {\n this.stem.setDirection(direction);\n this.stem.setExtension(this.getStemExtension());\n\n // Lookup the base custom notehead (closest to the base of the stem) to extend or shorten\n // the stem appropriately. If there's no custom note head, lookup the standard notehead.\n const glyph = this.getBaseCustomNoteHeadGlyph() || this.getGlyph();\n\n // Get the font-specific customizations for the note heads.\n const offsets = this.musicFont.lookupMetric(`stem.noteHead.${glyph.code_head}`,\n { offsetYBaseStemUp: 0, offsetYTopStemUp: 0, offsetYBaseStemDown: 0, offsetYTopStemDown: 0, });\n\n // Configure the stem to use these offsets.\n this.stem.setOptions({\n stem_up_y_offset: offsets.offsetYTopStemUp, // glyph.stem_up_y_offset,\n stem_down_y_offset: offsets.offsetYTopStemDown, // glyph.stem_down_y_offset,\n stem_up_y_base_offset: offsets.offsetYBaseStemUp, // glyph.stem_up_y_base_offset,\n stem_down_y_base_offset: offsets.offsetYBaseStemDown, // glyph.stem_down_y_base_offset,\n });\n }\n\n // Reset and reformat everything.\n this.reset();\n if (this.flag) { this.buildFlag(); }\n this.beam = null;\n if (this.preFormatted) { this.preFormat(); }\n return this;\n }\n\n // Get the `x` coordinate of the stem\n getStemX() {\n const x_begin = this.getAbsoluteX() + this.x_shift;\n const x_end = this.getAbsoluteX() + this.x_shift + this.getGlyphWidth();\n const stem_x = this.stem_direction === Stem.DOWN ? x_begin : x_end;\n return stem_x;\n }\n\n // Get the `x` coordinate for the center of the glyph.\n // Used for `TabNote` stems and stemlets over rests\n getCenterGlyphX() {\n return this.getAbsoluteX() + this.x_shift + (this.getGlyphWidth() / 2);\n }\n\n // Get the stem extension for the current duration\n getStemExtension() {\n const glyph = this.getGlyph();\n\n if (this.stemExtensionOverride != null) {\n return this.stemExtensionOverride;\n }\n\n if (glyph) {\n return this.getStemDirection() === 1\n ? glyph.stem_up_extension\n : glyph.stem_down_extension;\n }\n\n return 0;\n }\n\n // Set the stem length to a specific. Will override the default length.\n setStemLength(height) {\n this.stemExtensionOverride = (height - Stem.HEIGHT);\n return this;\n }\n\n // Get the top and bottom `y` values of the stem.\n getStemExtents() {\n return this.stem.getExtents();\n }\n\n // Sets the current note's beam\n setBeam(beam) { this.beam = beam; return this; }\n\n // Get the `y` value for the top/bottom modifiers at a specific `textLine`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n if (this.hasStem()) {\n return Math.min(\n this.stave.getYForTopText(textLine),\n extents.topY - (this.render_options.annotation_spacing * (textLine + 1))\n );\n } else {\n return this.stave.getYForTopText(textLine);\n }\n }\n\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n if (this.hasStem()) {\n return Math.max(\n this.stave.getYForTopText(textLine),\n extents.baseY + (this.render_options.annotation_spacing * (textLine))\n );\n } else {\n return this.stave.getYForBottomText(textLine);\n }\n }\n\n hasFlag() {\n return Flow.getGlyphProps(this.duration).flag && !this.beam;\n }\n\n // Post format the note\n postFormat() {\n if (this.beam) this.beam.postFormat();\n\n this.postFormatted = true;\n\n return this;\n }\n\n // Render the stem onto the canvas\n drawStem(stem_struct) {\n this.checkContext();\n this.setRendered();\n\n this.setStem(new Stem(stem_struct));\n this.stem.setContext(this.context).draw();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// `Modifier` is an abstract interface for notational elements that modify\n// a `Note`. Examples of modifiers are `Accidental`, `Annotation`, `Stroke`, etc.\n//\n// For a `Modifier` instance to be positioned correctly, it must be part of\n// a `ModifierContext`. All modifiers in the same context are rendered relative to\n// one another.\n//\n// Typically, all modifiers to a note are part of the same `ModifierContext` instance. Also,\n// in multi-voice staves, all modifiers to notes on the same `tick` are part of the same\n// `ModifierContext`. This ensures that multiple voices don't trample all over each other.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\n\n// To enable logging for this class. Set `Vex.Flow.Modifier.DEBUG` to `true`.\n// function L(...args) { if (Modifier.DEBUG) Vex.L('Vex.Flow.Modifier', args); }\n\nexport class Modifier extends Element {\n static get CATEGORY() { return 'none'; }\n\n // Modifiers can be positioned almost anywhere, relative to a note.\n static get Position() {\n return {\n LEFT: 1,\n RIGHT: 2,\n ABOVE: 3,\n BELOW: 4,\n };\n }\n\n static get PositionString() {\n return {\n above: Modifier.Position.ABOVE,\n below: Modifier.Position.BELOW,\n left: Modifier.Position.LEFT,\n right: Modifier.Position.RIGHT,\n };\n }\n\n constructor() {\n super();\n this.setAttribute('type', 'Modifier');\n\n this.width = 0;\n\n // Modifiers are attached to a note and an index. An index is a\n // specific head in a chord.\n this.note = null;\n this.index = null;\n\n // The `text_line` is reserved space above or below a stave.\n this.text_line = 0;\n this.position = Modifier.Position.LEFT;\n this.modifier_context = null;\n this.x_shift = 0;\n this.y_shift = 0;\n this.spacingFromNextModifier = 0;\n }\n\n // Called when position changes\n reset() {\n // do nothing\n }\n\n // Every modifier has a category. The `ModifierContext` uses this to determine\n // the type and order of the modifiers.\n getCategory() { return Modifier.CATEGORY; }\n\n // Get and set modifier widths.\n getWidth() { return this.width; }\n setWidth(width) { this.width = width; return this; }\n\n // Get and set attached note (`StaveNote`, `TabNote`, etc.)\n getNote() { return this.note; }\n setNote(note) { this.note = note; return this; }\n\n // Get and set note index, which is a specific note in a chord.\n getIndex() { return this.index; }\n setIndex(index) { this.index = index; return this; }\n\n // Every modifier must be part of a `ModifierContext`.\n getModifierContext() { return this.modifier_context; }\n setModifierContext(c) { this.modifier_context = c; return this; }\n\n // Get and set articulation position.\n getPosition() { return this.position; }\n setPosition(position) {\n this.position = typeof(position) === 'string'\n ? Modifier.PositionString[position]\n : position;\n this.reset();\n return this;\n }\n\n // Set the `text_line` for the modifier.\n setTextLine(line) { this.text_line = line; return this; }\n\n // Shift modifier down `y` pixels. Negative values shift up.\n setYShift(y) { this.y_shift = y; return this; }\n\n setSpacingFromNextModifier(x) {\n this.spacingFromNextModifier = x;\n }\n\n getSpacingFromNextModifier() { return this.spacingFromNextModifier; }\n\n // Shift modifier `x` pixels in the direction of the modifier. Negative values\n // shift reverse.\n setXShift(x) {\n this.x_shift = 0;\n if (this.position === Modifier.Position.LEFT) {\n this.x_shift -= x;\n } else {\n this.x_shift += x;\n }\n }\n getXShift() { return this.x_shift; }\n\n // Render the modifier onto the canvas.\n draw() {\n this.checkContext();\n throw new Vex.RERR('MethodNotImplemented', 'draw() not implemented for this modifier.');\n }\n\n // aligns sub notes of NoteSubGroup (or GraceNoteGroup) to the main note with correct x-offset\n alignSubNotesWithNote(subNotes, note) {\n // Shift over the tick contexts of each note\n const tickContext = note.getTickContext();\n const metrics = tickContext.getMetrics();\n const subNoteXOffset = tickContext.getX() - metrics.modLeftPx - metrics.modRightPx\n + this.getSpacingFromNextModifier();\n\n subNotes.forEach((subNote) => {\n const subTickContext = subNote.getTickContext();\n subNote.setStave(note.stave);\n subTickContext.setXOffset(subNoteXOffset); // don't touch baseX to avoid shift each render\n });\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements dot modifiers for notes.\n\nimport { Vex } from './vex';\nimport { Modifier } from './modifier';\n\nexport class Dot extends Modifier {\n static get CATEGORY() { return 'dots'; }\n\n // Arrange dots inside a ModifierContext.\n static format(dots, state) {\n const right_shift = state.right_shift;\n const dot_spacing = 1;\n\n if (!dots || dots.length === 0) return false;\n\n const dot_list = [];\n const max_shift_map = {};\n for (let i = 0; i < dots.length; ++i) {\n const dot = dots[i];\n const note = dot.getNote();\n\n let props;\n let shift;\n\n // Only StaveNote has .getKeyProps()\n if (typeof note.getKeyProps === 'function') {\n props = note.getKeyProps()[dot.getIndex()];\n shift = note.getRightDisplacedHeadPx();\n } else { // Else it's a TabNote\n props = { line: 0.5 }; // Shim key props for dot placement\n shift = 0;\n }\n\n const note_id = note.getAttribute('id');\n dot_list.push({ line: props.line, note, note_id, dot });\n max_shift_map[note_id] = Math.max(max_shift_map[note_id] || shift, shift);\n }\n\n // Sort dots by line number.\n dot_list.sort((a, b) => b.line - a.line);\n\n let dot_shift = right_shift;\n let x_width = 0;\n let last_line = null;\n let last_note = null;\n let prev_dotted_space = null;\n let half_shiftY = 0;\n\n for (let i = 0; i < dot_list.length; ++i) {\n const { dot, note, note_id, line } = dot_list[i];\n\n // Reset the position of the dot every line.\n if (line !== last_line || note !== last_note) {\n dot_shift = max_shift_map[note_id];\n }\n\n if (!note.isRest() && line !== last_line) {\n if (Math.abs(line % 1) === 0.5) {\n // note is on a space, so no dot shift\n half_shiftY = 0;\n } else {\n // note is on a line, so shift dot to space above the line\n half_shiftY = 0.5;\n if (last_note != null &&\n !last_note.isRest() && last_line - line === 0.5) {\n // previous note on a space, so shift dot to space below the line\n half_shiftY = -0.5;\n } else if (line + half_shiftY === prev_dotted_space) {\n // previous space is dotted, so shift dot to space below the line\n half_shiftY = -0.5;\n }\n }\n }\n\n // convert half_shiftY to a multiplier for dots.draw()\n if (note.isRest()) {\n dot.dot_shiftY += -half_shiftY;\n } else {\n dot.dot_shiftY = -half_shiftY;\n }\n prev_dotted_space = line + half_shiftY;\n\n dot.setXShift(dot_shift);\n dot_shift += dot.getWidth() + dot_spacing; // spacing\n x_width = (dot_shift > x_width) ? dot_shift : x_width;\n last_line = line;\n last_note = note;\n }\n\n // Update state.\n state.right_shift += x_width;\n return true;\n }\n\n /**\n * @constructor\n */\n constructor() {\n super();\n this.setAttribute('type', 'Dot');\n\n this.note = null;\n this.index = null;\n this.position = Modifier.Position.RIGHT;\n\n this.radius = 2;\n this.setWidth(5);\n this.dot_shiftY = 0;\n }\n\n getCategory() { return Dot.CATEGORY; }\n\n setNote(note) {\n this.note = note;\n\n if (this.note.getCategory() === 'gracenotes') {\n this.radius *= 0.50;\n this.setWidth(3);\n }\n }\n\n setDotShiftY(y) { this.dot_shiftY = y; return this; }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n if (!this.note || this.index === null) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw dot without a note and index.\");\n }\n\n const lineSpace = this.note.stave.options.spacing_between_lines_px;\n\n const start = this.note.getModifierStartXY(this.position, this.index,\n { forceFlagRight: true });\n\n // Set the starting y coordinate to the base of the stem for TabNotes\n if (this.note.getCategory() === 'tabnotes') {\n start.y = this.note.getStemExtents().baseY;\n }\n\n const x = (start.x + this.x_shift) + this.width - this.radius;\n const y = start.y + this.y_shift + (this.dot_shiftY * lineSpace);\n const ctx = this.context;\n\n ctx.beginPath();\n ctx.arc(x, y, this.radius, 0, Math.PI * 2, false);\n ctx.fill();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements notes for standard notation. This consists of one or\n// more `NoteHeads`, an optional stem, and an optional flag.\n//\n// *Throughout these comments, a \"note\" refers to the entire `StaveNote`,\n// and a \"key\" refers to a specific pitch/notehead within a note.*\n//\n// See `tests/stavenote_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { BoundingBox } from './boundingbox';\nimport { Stem } from './stem';\nimport { NoteHead } from './notehead';\nimport { StemmableNote } from './stemmablenote';\nimport { Modifier } from './modifier';\nimport { Dot } from './dot';\n\n// To enable logging for this class. Set `Vex.Flow.StaveNote.DEBUG` to `true`.\nfunction L(...args) { if (StaveNote.DEBUG) Vex.L('Vex.Flow.StaveNote', args); }\n\nconst getStemAdjustment = (note) => Stem.WIDTH / (2 * -note.getStemDirection());\n\nconst isInnerNoteIndex = (note, index) =>\n index === (note.getStemDirection() === Stem.UP ? note.keyProps.length - 1 : 0);\n\n// Helper methods for rest positioning in ModifierContext.\nfunction shiftRestVertical(rest, note, dir) {\n const delta = (note.isrest ? 0.0 : 1.0) * dir;\n\n rest.line += delta;\n rest.maxLine += delta;\n rest.minLine += delta;\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) + (delta));\n}\n\n// Called from formatNotes :: center a rest between two notes\nfunction centerRest(rest, noteU, noteL) {\n const delta = rest.line - Vex.MidLine(noteU.minLine, noteL.maxLine);\n rest.note.setKeyLine(0, rest.note.getKeyLine(0) - delta);\n rest.line -= delta;\n rest.maxLine -= delta;\n rest.minLine -= delta;\n}\n\nexport class StaveNote extends StemmableNote {\n static get CATEGORY() { return 'stavenotes'; }\n static get STEM_UP() { return Stem.UP; }\n static get STEM_DOWN() { return Stem.DOWN; }\n static get DEFAULT_LEDGER_LINE_OFFSET() { return 3; }\n\n // ## Static Methods\n //\n // Format notes inside a ModifierContext.\n static format(notes, state) {\n if (!notes || notes.length < 2) return false;\n\n // FIXME: VexFlow will soon require that a stave be set before formatting.\n // Which, according to the below condition, means that following branch will\n // always be taken and the rest of this function is dead code.\n //\n // Problematically, `Formatter#formatByY` was not designed to work for more\n // than 2 voices (although, doesn't throw on this condition, just tries\n // to power through).\n //\n // Based on the above:\n // * 2 voices can be formatted *with or without* a stave being set but\n // the output will be different\n // * 3 voices can only be formatted *without* a stave\n if (notes[0].getStave()) {\n return StaveNote.formatByY(notes, state);\n }\n\n const notesList = [];\n\n for (let i = 0; i < notes.length; i++) {\n const props = notes[i].getKeyProps();\n const line = props[0].line;\n let minL = props[props.length - 1].line;\n const stemDirection = notes[i].getStemDirection();\n const stemMax = notes[i].getStemLength() / 10;\n const stemMin = notes[i].getStemMinumumLength() / 10;\n\n let maxL;\n if (notes[i].isRest()) {\n maxL = line + notes[i].glyph.line_above;\n minL = line - notes[i].glyph.line_below;\n } else {\n maxL = stemDirection === 1\n ? props[props.length - 1].line + stemMax\n : props[props.length - 1].line;\n\n minL = stemDirection === 1\n ? props[0].line\n : props[0].line - stemMax;\n }\n\n notesList.push({\n line: props[0].line, // note/rest base line\n maxLine: maxL, // note/rest upper bounds line\n minLine: minL, // note/rest lower bounds line\n isrest: notes[i].isRest(),\n stemDirection,\n stemMax, // Maximum (default) note stem length;\n stemMin, // minimum note stem length\n voice_shift: notes[i].getVoiceShiftWidth(),\n is_displaced: notes[i].isDisplaced(), // note manually displaced\n note: notes[i],\n });\n }\n\n const voices = notesList.length;\n\n let noteU = notesList[0];\n const noteM = voices > 2 ? notesList[1] : null;\n let noteL = voices > 2 ? notesList[2] : notesList[1];\n\n // for two voice backward compatibility, ensure upper voice is stems up\n // for three voices, the voices must be in order (upper, middle, lower)\n if (voices === 2 && noteU.stemDirection === -1 && noteL.stemDirection === 1) {\n noteU = notesList[1];\n noteL = notesList[0];\n }\n\n const voiceXShift = Math.max(noteU.voice_shift, noteL.voice_shift);\n let xShift = 0;\n let stemDelta;\n\n // Test for two voice note intersection\n if (voices === 2) {\n const lineSpacing = noteU.stemDirection === noteL.stemDirection ? 0.0 : 0.5;\n // if top voice is a middle voice, check stem intersection with lower voice\n if (noteU.stemDirection === noteL.stemDirection &&\n noteU.minLine <= noteL.maxLine) {\n if (!noteU.isrest) {\n stemDelta = Math.abs(noteU.line - (noteL.maxLine + 0.5));\n stemDelta = Math.max(stemDelta, noteU.stemMin);\n noteU.minLine = noteU.line - stemDelta;\n noteU.note.setStemLength(stemDelta * 10);\n }\n }\n if (noteU.minLine <= noteL.maxLine + lineSpacing) {\n if (noteU.isrest) {\n // shift rest up\n shiftRestVertical(noteU, noteL, 1);\n } else if (noteL.isrest) {\n // shift rest down\n shiftRestVertical(noteL, noteU, -1);\n } else {\n xShift = voiceXShift;\n if (noteU.stemDirection === noteL.stemDirection) {\n // upper voice is middle voice, so shift it right\n noteU.note.setXShift(xShift + 3);\n } else {\n // shift lower voice right\n noteL.note.setXShift(xShift);\n }\n }\n }\n\n // format complete\n return true;\n }\n\n // Check middle voice stem intersection with lower voice\n if (noteM !== null && noteM.minLine < noteL.maxLine + 0.5) {\n if (!noteM.isrest) {\n stemDelta = Math.abs(noteM.line - (noteL.maxLine + 0.5));\n stemDelta = Math.max(stemDelta, noteM.stemMin);\n noteM.minLine = noteM.line - stemDelta;\n noteM.note.setStemLength(stemDelta * 10);\n }\n }\n\n // For three voices, test if rests can be repositioned\n //\n // Special case 1 :: middle voice rest between two notes\n //\n if (noteM.isrest && !noteU.isrest && !noteL.isrest) {\n if (noteU.minLine <= noteM.maxLine || noteM.minLine <= noteL.maxLine) {\n const restHeight = noteM.maxLine - noteM.minLine;\n const space = noteU.minLine - noteL.maxLine;\n if (restHeight < space) {\n // center middle voice rest between the upper and lower voices\n centerRest(noteM, noteU, noteL);\n } else {\n xShift = voiceXShift + 3; // shift middle rest right\n noteM.note.setXShift(xShift);\n }\n // format complete\n return true;\n }\n }\n\n // Special case 2 :: all voices are rests\n if (noteU.isrest && noteM.isrest && noteL.isrest) {\n // Shift upper voice rest up\n shiftRestVertical(noteU, noteM, 1);\n // Shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n // format complete\n return true;\n }\n\n // Test if any other rests can be repositioned\n if (noteM.isrest && noteU.isrest && noteM.minLine <= noteL.maxLine) {\n // Shift middle voice rest up\n shiftRestVertical(noteM, noteL, 1);\n }\n if (noteM.isrest && noteL.isrest && noteU.minLine <= noteM.maxLine) {\n // Shift middle voice rest down\n shiftRestVertical(noteM, noteU, -1);\n }\n if (noteU.isrest && noteU.minLine <= noteM.maxLine) {\n // shift upper voice rest up;\n shiftRestVertical(noteU, noteM, 1);\n }\n if (noteL.isrest && noteM.minLine <= noteL.maxLine) {\n // shift lower voice rest down\n shiftRestVertical(noteL, noteM, -1);\n }\n\n // If middle voice intersects upper or lower voice\n if ((!noteU.isrest && !noteM.isrest && noteU.minLine <= noteM.maxLine + 0.5) ||\n (!noteM.isrest && !noteL.isrest && noteM.minLine <= noteL.maxLine)) {\n xShift = voiceXShift + 3; // shift middle note right\n noteM.note.setXShift(xShift);\n }\n\n return true;\n }\n\n static formatByY(notes, state) {\n // NOTE: this function does not support more than two voices per stave\n // use with care.\n let hasStave = true;\n\n for (let i = 0; i < notes.length; i++) {\n hasStave = hasStave && notes[i].getStave() != null;\n }\n\n if (!hasStave) {\n throw new Vex.RERR(\n 'Stave Missing',\n 'All notes must have a stave - Vex.Flow.ModifierContext.formatMultiVoice!'\n );\n }\n\n let xShift = 0;\n\n for (let i = 0; i < notes.length - 1; i++) {\n let topNote = notes[i];\n let bottomNote = notes[i + 1];\n\n if (topNote.getStemDirection() === Stem.DOWN) {\n topNote = notes[i + 1];\n bottomNote = notes[i];\n }\n\n const topKeys = topNote.getKeyProps();\n const bottomKeys = bottomNote.getKeyProps();\n\n const HALF_NOTEHEAD_HEIGHT = 0.5;\n\n // `keyProps` and `stave.getYForLine` have different notions of a `line`\n // so we have to convert the keyProps value by subtracting 5.\n // See https://github.com/0xfe/vexflow/wiki/Development-Gotchas\n //\n // We also extend the y for each note by a half notehead because the\n // notehead's origin is centered\n const topNoteBottomY = topNote\n .getStave()\n .getYForLine(5 - topKeys[0].line + HALF_NOTEHEAD_HEIGHT);\n\n const bottomNoteTopY = bottomNote\n .getStave()\n .getYForLine(5 - bottomKeys[bottomKeys.length - 1].line - HALF_NOTEHEAD_HEIGHT);\n\n const areNotesColliding = bottomNoteTopY - topNoteBottomY < 0;\n\n if (areNotesColliding) {\n xShift = topNote.getVoiceShiftWidth() + 2;\n bottomNote.setXShift(xShift);\n }\n }\n\n state.right_shift += xShift;\n }\n\n static postFormat(notes) {\n if (!notes) return false;\n\n notes.forEach(note => note.postFormat());\n\n return true;\n }\n\n constructor(noteStruct) {\n super(noteStruct);\n this.setAttribute('type', 'StaveNote');\n\n this.keys = noteStruct.keys;\n this.clef = noteStruct.clef;\n this.octave_shift = noteStruct.octave_shift;\n this.beam = null;\n\n // Pull note rendering properties\n this.glyph = Flow.getGlyphProps(this.duration, this.noteType);\n\n if (!this.glyph) {\n throw new Vex.RuntimeError(\n 'BadArguments',\n `Invalid note initialization data (No glyph found): ${JSON.stringify(noteStruct)}`\n );\n }\n\n // if true, displace note to right\n this.displaced = false;\n this.dot_shiftY = 0;\n // per-pitch properties\n this.keyProps = [];\n // for displaced ledger lines\n this.use_default_head_x = false;\n\n // Drawing\n this.note_heads = [];\n this.modifiers = [];\n\n Vex.Merge(this.render_options, {\n // font size for note heads and rests\n glyph_font_scale: noteStruct.glyph_font_scale || Flow.DEFAULT_NOTATION_FONT_SCALE,\n // number of stroke px to the left and right of head\n stroke_px: noteStruct.stroke_px || StaveNote.DEFAULT_LEDGER_LINE_OFFSET,\n });\n\n this.calculateKeyProps();\n this.buildStem();\n\n // Set the stem direction\n if (noteStruct.auto_stem) {\n this.autoStem();\n } else {\n this.setStemDirection(noteStruct.stem_direction);\n }\n this.reset();\n this.buildFlag();\n }\n\n reset() {\n super.reset();\n\n // Save prior noteHead styles & reapply them after making new noteheads.\n const noteHeadStyles = this.note_heads.map(noteHead => noteHead.getStyle());\n this.buildNoteHeads();\n this.note_heads.forEach((noteHead, index) => noteHead.setStyle(noteHeadStyles[index]));\n\n if (this.stave) {\n this.note_heads.forEach(head => head.setStave(this.stave));\n }\n this.calcNoteDisplacements();\n }\n\n setBeam(beam) {\n this.beam = beam;\n this.calcNoteDisplacements();\n return this;\n }\n\n getCategory() { return StaveNote.CATEGORY; }\n\n // Builds a `Stem` for the note\n buildStem() {\n this.setStem(new Stem({ hide: !!this.isRest(), }));\n }\n\n // Builds a `NoteHead` for each key in the note\n buildNoteHeads() {\n this.note_heads = [];\n const stemDirection = this.getStemDirection();\n const keys = this.getKeys();\n\n let lastLine = null;\n let lineDiff = null;\n let displaced = false;\n\n // Draw notes from bottom to top.\n\n // For down-stem notes, we draw from top to bottom.\n let start;\n let end;\n let step;\n if (stemDirection === Stem.UP) {\n start = 0;\n end = keys.length;\n step = 1;\n } else if (stemDirection === Stem.DOWN) {\n start = keys.length - 1;\n end = -1;\n step = -1;\n }\n\n for (let i = start; i !== end; i += step) {\n const noteProps = this.keyProps[i];\n const line = noteProps.line;\n\n // Keep track of last line with a note head, so that consecutive heads\n // are correctly displaced.\n if (lastLine === null) {\n lastLine = line;\n } else {\n lineDiff = Math.abs(lastLine - line);\n if (lineDiff === 0 || lineDiff === 0.5) {\n displaced = !displaced;\n } else {\n displaced = false;\n this.use_default_head_x = true;\n }\n }\n lastLine = line;\n\n const notehead = new NoteHead({\n duration: this.duration,\n note_type: this.noteType,\n displaced,\n stem_direction: stemDirection,\n custom_glyph_code: noteProps.code,\n glyph_font_scale: this.render_options.glyph_font_scale,\n x_shift: noteProps.shift_right,\n stem_up_x_offset: noteProps.stem_up_x_offset,\n stem_down_x_offset: noteProps.stem_down_x_offset,\n line: noteProps.line,\n });\n\n this.note_heads[i] = notehead;\n }\n }\n\n // Automatically sets the stem direction based on the keys in the note\n autoStem() {\n // Figure out optimal stem direction based on given notes\n this.minLine = this.keyProps[0].line;\n this.maxLine = this.keyProps[this.keyProps.length - 1].line;\n\n const MIDDLE_LINE = 3;\n const decider = (this.minLine + this.maxLine) / 2;\n const stemDirection = decider < MIDDLE_LINE ? Stem.UP : Stem.DOWN;\n\n this.setStemDirection(stemDirection);\n }\n\n // Calculates and stores the properties for each key in the note\n calculateKeyProps() {\n let lastLine = null;\n for (let i = 0; i < this.keys.length; ++i) {\n const key = this.keys[i];\n\n // All rests use the same position on the line.\n // if (this.glyph.rest) key = this.glyph.position;\n if (this.glyph.rest) this.glyph.position = key;\n\n const options = { octave_shift: this.octave_shift || 0 };\n const props = Flow.keyProperties(key, this.clef, options);\n\n if (!props) {\n throw new Vex.RuntimeError('BadArguments', `Invalid key for note properties: ${key}`);\n }\n\n // Override line placement for default rests\n if (props.key === 'R') {\n if (this.duration === '1' || this.duration === 'w') {\n props.line = 4;\n } else {\n props.line = 3;\n }\n }\n\n // Calculate displacement of this note\n const line = props.line;\n if (lastLine === null) {\n lastLine = line;\n } else {\n if (Math.abs(lastLine - line) === 0.5) {\n this.displaced = true;\n props.displaced = true;\n\n // Have to mark the previous note as\n // displaced as well, for modifier placement\n if (this.keyProps.length > 0) {\n this.keyProps[i - 1].displaced = true;\n }\n }\n }\n\n lastLine = line;\n this.keyProps.push(props);\n }\n\n // Sort the notes from lowest line to highest line\n lastLine = -Infinity;\n this.keyProps.forEach(key => {\n if (key.line < lastLine) {\n Vex.W(\n 'Unsorted keys in note will be sorted. ' +\n 'See https://github.com/0xfe/vexflow/issues/104 for details.'\n );\n }\n lastLine = key.line;\n });\n this.keyProps.sort((a, b) => a.line - b.line);\n }\n\n // Get the `BoundingBox` for the entire note\n getBoundingBox() {\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call getBoundingBox on an unformatted note.\");\n }\n\n const { width: w, modLeftPx, leftDisplacedHeadPx } = this.getMetrics();\n const x = this.getAbsoluteX() - modLeftPx - leftDisplacedHeadPx;\n\n let minY = 0;\n let maxY = 0;\n const halfLineSpacing = this.getStave().getSpacingBetweenLines() / 2;\n const lineSpacing = halfLineSpacing * 2;\n\n if (this.isRest()) {\n const y = this.ys[0];\n const frac = Flow.durationToFraction(this.duration);\n if (frac.equals(1) || frac.equals(2)) {\n minY = y - halfLineSpacing;\n maxY = y + halfLineSpacing;\n } else {\n minY = y - (this.glyph.line_above * lineSpacing);\n maxY = y + (this.glyph.line_below * lineSpacing);\n }\n } else if (this.glyph.stem) {\n const ys = this.getStemExtents();\n ys.baseY += halfLineSpacing * this.stem_direction;\n minY = Math.min(ys.topY, ys.baseY);\n maxY = Math.max(ys.topY, ys.baseY);\n } else {\n minY = null;\n maxY = null;\n\n for (let i = 0; i < this.ys.length; ++i) {\n const yy = this.ys[i];\n if (i === 0) {\n minY = yy;\n maxY = yy;\n } else {\n minY = Math.min(yy, minY);\n maxY = Math.max(yy, maxY);\n }\n }\n minY -= halfLineSpacing;\n maxY += halfLineSpacing;\n }\n\n return new BoundingBox(x, minY, w, maxY - minY);\n }\n\n // Gets the line number of the top or bottom note in the chord.\n // If `isTopNote` is `true` then get the top note\n getLineNumber(isTopNote) {\n if (!this.keyProps.length) {\n throw new Vex.RERR(\n 'NoKeyProps', \"Can't get bottom note line, because note is not initialized properly.\"\n );\n }\n\n let resultLine = this.keyProps[0].line;\n\n // No precondition assumed for sortedness of keyProps array\n for (let i = 0; i < this.keyProps.length; i++) {\n const thisLine = this.keyProps[i].line;\n if (isTopNote) {\n if (thisLine > resultLine) resultLine = thisLine;\n } else {\n if (thisLine < resultLine) resultLine = thisLine;\n }\n }\n\n return resultLine;\n }\n\n // Determine if current note is a rest\n isRest() { return this.glyph.rest; }\n\n // Determine if the current note is a chord\n isChord() { return !this.isRest() && this.keys.length > 1; }\n\n // Determine if the `StaveNote` has a stem\n hasStem() { return this.glyph.stem; }\n\n hasFlag() {\n return super.hasFlag() && !this.isRest();\n }\n\n getStemX() {\n if (this.noteType === 'r') {\n return this.getCenterGlyphX();\n } else {\n // We adjust the origin of the stem because we want the stem left-aligned\n // with the notehead if stemmed-down, and right-aligned if stemmed-up\n return super.getStemX() + getStemAdjustment(this);\n }\n }\n\n // Get the `y` coordinate for text placed on the top/bottom of a\n // note at a desired `text_line`\n getYForTopText(textLine) {\n const extents = this.getStemExtents();\n return Math.min(\n this.stave.getYForTopText(textLine),\n extents.topY - (this.render_options.annotation_spacing * (textLine + 1))\n );\n }\n getYForBottomText(textLine) {\n const extents = this.getStemExtents();\n return Math.max(\n this.stave.getYForTopText(textLine),\n extents.baseY + (this.render_options.annotation_spacing * (textLine))\n );\n }\n\n // Sets the current note to the provided `stave`. This applies\n // `y` values to the `NoteHeads`.\n setStave(stave) {\n super.setStave(stave);\n\n const ys = this.note_heads.map(notehead => {\n notehead.setStave(stave);\n return notehead.getY();\n });\n\n this.setYs(ys);\n\n if (this.stem) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n this.stem.setYBounds(y_top, y_bottom);\n }\n\n return this;\n }\n\n // Get the pitches in the note\n getKeys() { return this.keys; }\n\n // Get the properties for all the keys in the note\n getKeyProps() {\n return this.keyProps;\n }\n\n // Check if note is shifted to the right\n isDisplaced() {\n return this.displaced;\n }\n\n // Sets whether shift note to the right. `displaced` is a `boolean`\n setNoteDisplaced(displaced) {\n this.displaced = displaced;\n return this;\n }\n\n // Get the starting `x` coordinate for a `StaveTie`\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n tieStartX += this.getGlyphWidth() + this.x_shift + this.rightDisplacedHeadPx;\n if (this.modifierContext) tieStartX += this.modifierContext.getRightShift();\n return tieStartX;\n }\n\n // Get the ending `x` coordinate for a `StaveTie`\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n tieEndX += this.x_shift - this.leftDisplacedHeadPx;\n return tieEndX;\n }\n\n // Get the stave line on which to place a rest\n getLineForRest() {\n let restLine = this.keyProps[0].line;\n if (this.keyProps.length > 1) {\n const lastLine = this.keyProps[this.keyProps.length - 1].line;\n const top = Math.max(restLine, lastLine);\n const bot = Math.min(restLine, lastLine);\n restLine = Vex.MidLine(top, bot);\n }\n\n return restLine;\n }\n\n // Get the default `x` and `y` coordinates for the provided `position`\n // and key `index`\n getModifierStartXY(position, index, options) {\n options = options || {};\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n\n if (this.ys.length === 0) {\n throw new Vex.RERR('NoYValues', 'No Y-Values calculated for this note.');\n }\n\n const { ABOVE, BELOW, LEFT, RIGHT } = Modifier.Position;\n let x = 0;\n if (position === LEFT) {\n // FIXME: Left modifier padding, move to font file\n x = -1 * 2;\n } else if (position === RIGHT) {\n // FIXME: Right modifier padding, move to font file\n x = this.getGlyphWidth() + this.x_shift + 2;\n\n if (this.stem_direction === Stem.UP && this.hasFlag() &&\n (options.forceFlagRight || isInnerNoteIndex(this, index))) {\n x += this.flag.getMetrics().width;\n }\n } else if (position === BELOW || position === ABOVE) {\n x = this.getGlyphWidth() / 2;\n }\n\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n\n // Sets the style of the complete StaveNote, including all keys\n // and the stem.\n setStyle(style) {\n super.setStyle(style);\n this.note_heads.forEach(notehead => notehead.setStyle(style));\n this.stem.setStyle(style);\n }\n\n setStemStyle(style) {\n const stem = this.getStem();\n stem.setStyle(style);\n }\n getStemStyle() { return this.stem.getStyle(); }\n\n setLedgerLineStyle(style) { this.ledgerLineStyle = style; }\n getLedgerLineStyle() { return this.ledgerLineStyle; }\n\n setFlagStyle(style) { this.flagStyle = style; }\n getFlagStyle() { return this.flagStyle; }\n\n // Sets the notehead at `index` to the provided coloring `style`.\n //\n // `style` is an `object` with the following properties: `shadowColor`,\n // `shadowBlur`, `fillStyle`, `strokeStyle`\n setKeyStyle(index, style) {\n this.note_heads[index].setStyle(style);\n return this;\n }\n\n setKeyLine(index, line) {\n this.keyProps[index].line = line;\n this.reset();\n return this;\n }\n\n getKeyLine(index) {\n return this.keyProps[index].line;\n }\n\n // Add self to modifier context. `mContext` is the `ModifierContext`\n // to be added to.\n addToModifierContext(mContext) {\n this.setModifierContext(mContext);\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addModifier(this.modifiers[i]);\n }\n this.modifierContext.addModifier(this);\n this.setPreFormatted(false);\n return this;\n }\n\n // Generic function to add modifiers to a note\n //\n // Parameters:\n // * `index`: The index of the key that we're modifying\n // * `modifier`: The modifier to add\n addModifier(index, modifier) {\n modifier.setNote(this);\n modifier.setIndex(index);\n this.modifiers.push(modifier);\n this.setPreFormatted(false);\n return this;\n }\n\n // Helper function to add an accidental to a key\n addAccidental(index, accidental) {\n return this.addModifier(index, accidental);\n }\n\n // Helper function to add an articulation to a key\n addArticulation(index, articulation) {\n return this.addModifier(index, articulation);\n }\n\n // Helper function to add an annotation to a key\n addAnnotation(index, annotation) {\n return this.addModifier(index, annotation);\n }\n\n // Helper function to add a dot on a specific key\n addDot(index) {\n const dot = new Dot();\n dot.setDotShiftY(this.glyph.dot_shiftY);\n this.dots++;\n return this.addModifier(index, dot);\n }\n\n // Convenience method to add dot to all keys in note\n addDotToAll() {\n for (let i = 0; i < this.keys.length; ++i) {\n this.addDot(i);\n }\n return this;\n }\n\n // Get all accidentals in the `ModifierContext`\n getAccidentals() {\n return this.modifierContext.getModifiers('accidentals');\n }\n\n // Get all dots in the `ModifierContext`\n getDots() {\n return this.modifierContext.getModifiers('dots');\n }\n\n // Get the width of the note if it is displaced. Used for `Voice`\n // formatting\n getVoiceShiftWidth() {\n // TODO: may need to accomodate for dot here.\n return this.getGlyphWidth() * (this.displaced ? 2 : 1);\n }\n\n // Calculates and sets the extra pixels to the left or right\n // if the note is displaced.\n calcNoteDisplacements() {\n this.setLeftDisplacedHeadPx(\n this.displaced && this.stem_direction === Stem.DOWN\n ? this.getGlyphWidth()\n : 0\n );\n\n // For upstems with flags, the extra space is unnecessary, since it's taken\n // up by the flag.\n this.setRightDisplacedHeadPx(\n !this.hasFlag() && this.displaced && this.stem_direction === Stem.UP\n ? this.getGlyphWidth()\n : 0\n );\n }\n\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted) return;\n if (this.modifierContext) this.modifierContext.preFormat();\n\n let width = this.getGlyphWidth() + this.leftDisplacedHeadPx + this.rightDisplacedHeadPx;\n\n // For upward flagged notes, the width of the flag needs to be added\n if (this.glyph.flag && this.beam === null && this.stem_direction === Stem.UP) {\n width += this.getGlyphWidth();\n // TODO: Add flag width as a separate metric\n }\n\n this.setWidth(width);\n this.setPreFormatted(true);\n }\n\n /**\n * @typedef {Object} noteHeadBounds\n * @property {number} y_top the highest notehead bound\n * @property {number} y_bottom the lowest notehead bound\n * @property {number|Null} displaced_x the starting x for displaced noteheads\n * @property {number|Null} non_displaced_x the starting x for non-displaced noteheads\n * @property {number} highest_line the highest notehead line in traditional music line\n * numbering (bottom line = 1, top line = 5)\n * @property {number} lowest_line the lowest notehead line\n * @property {number|false} highest_displaced_line the highest staff line number\n * for a displaced notehead\n * @property {number|false} lowest_displaced_line\n * @property {number} highest_non_displaced_line\n * @property {number} lowest_non_displaced_line\n */\n\n /**\n * Get the staff line and y value for the highest & lowest noteheads\n * @returns {noteHeadBounds}\n */\n getNoteHeadBounds() {\n // Top and bottom Y values for stem.\n let yTop = null;\n let yBottom = null;\n let nonDisplacedX = null;\n let displacedX = null;\n\n let highestLine = this.stave.getNumLines();\n let lowestLine = 1;\n let highestDisplacedLine = false;\n let lowestDisplacedLine = false;\n let highestNonDisplacedLine = highestLine;\n let lowestNonDisplacedLine = lowestLine;\n\n this.note_heads.forEach(notehead => {\n const line = notehead.getLine();\n const y = notehead.getY();\n\n if (yTop === null || y < yTop) {\n yTop = y;\n }\n\n if (yBottom === null || y > yBottom) {\n yBottom = y;\n }\n\n if (displacedX === null && notehead.isDisplaced()) {\n displacedX = notehead.getAbsoluteX();\n }\n\n if (nonDisplacedX === null && !notehead.isDisplaced()) {\n nonDisplacedX = notehead.getAbsoluteX();\n }\n\n highestLine = line > highestLine ? line : highestLine;\n lowestLine = line < lowestLine ? line : lowestLine;\n\n if (notehead.isDisplaced()) {\n highestDisplacedLine = (highestDisplacedLine === false) ?\n line : Math.max(line, highestDisplacedLine);\n lowestDisplacedLine = (lowestDisplacedLine === false) ?\n line : Math.min(line, lowestDisplacedLine);\n } else {\n highestNonDisplacedLine = Math.max(line, highestNonDisplacedLine);\n lowestNonDisplacedLine = Math.min(line, lowestNonDisplacedLine);\n }\n }, this);\n\n return {\n y_top: yTop,\n y_bottom: yBottom,\n displaced_x: displacedX,\n non_displaced_x: nonDisplacedX,\n highest_line: highestLine,\n lowest_line: lowestLine,\n highest_displaced_line: highestDisplacedLine,\n lowest_displaced_line: lowestDisplacedLine,\n highest_non_displaced_line: highestNonDisplacedLine,\n lowest_non_displaced_line: lowestNonDisplacedLine,\n };\n }\n\n // Get the starting `x` coordinate for the noteheads\n getNoteHeadBeginX() {\n return this.getAbsoluteX() + this.x_shift;\n }\n\n // Get the ending `x` coordinate for the noteheads\n getNoteHeadEndX() {\n const xBegin = this.getNoteHeadBeginX();\n return xBegin + this.getGlyphWidth();\n }\n\n // Draw the ledger lines between the stave and the highest/lowest keys\n drawLedgerLines() {\n const {\n stave, glyph,\n render_options: { stroke_px },\n context: ctx,\n } = this;\n\n const width = glyph.getWidth() + (stroke_px * 2);\n const doubleWidth = 2 * (glyph.getWidth() + stroke_px) - (Stem.WIDTH / 2);\n\n if (this.isRest()) return;\n if (!ctx) {\n throw new Vex.RERR('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n\n const {\n highest_line,\n lowest_line,\n highest_displaced_line,\n highest_non_displaced_line,\n lowest_displaced_line,\n lowest_non_displaced_line,\n displaced_x,\n non_displaced_x,\n } = this.getNoteHeadBounds();\n\n const min_x = Math.min(displaced_x, non_displaced_x);\n\n const drawLedgerLine = (y, normal, displaced) => {\n let x;\n if (displaced && normal) x = min_x - stroke_px;\n else if (normal) x = non_displaced_x - stroke_px;\n else x = displaced_x - stroke_px;\n const ledgerWidth = (normal && displaced) ? doubleWidth : width;\n\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x + ledgerWidth, y);\n ctx.stroke();\n };\n\n const style = { ...stave.getStyle() || {}, ...this.getLedgerLineStyle() || {} };\n this.applyStyle(ctx, style);\n\n // Draw ledger lines below the staff:\n for (let line = 6; line <= highest_line; ++line) {\n const normal = (non_displaced_x !== null) && (line <= highest_non_displaced_line);\n const displaced = (displaced_x !== null) && (line <= highest_displaced_line);\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n\n // Draw ledger lines above the staff:\n for (let line = 0; line >= lowest_line; --line) {\n const normal = (non_displaced_x !== null) && (line >= lowest_non_displaced_line);\n const displaced = (displaced_x !== null) && (line >= lowest_displaced_line);\n drawLedgerLine(stave.getYForNote(line), normal, displaced);\n }\n\n this.restoreStyle(ctx, style);\n }\n\n // Draw all key modifiers\n drawModifiers() {\n if (!this.context) {\n throw new Vex.RERR('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n\n const ctx = this.context;\n ctx.openGroup('modifiers');\n for (let i = 0; i < this.modifiers.length; i++) {\n const modifier = this.modifiers[i];\n const notehead = this.note_heads[modifier.getIndex()];\n const noteheadStyle = notehead.getStyle();\n notehead.applyStyle(ctx, noteheadStyle);\n modifier.setContext(ctx);\n modifier.drawWithStyle();\n notehead.restoreStyle(ctx, noteheadStyle);\n }\n ctx.closeGroup();\n }\n\n // Draw the flag for the note\n drawFlag() {\n const { stem, beam, context: ctx } = this;\n\n if (!ctx) {\n throw new Vex.RERR('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n\n const shouldRenderFlag = beam === null;\n const glyph = this.getGlyph();\n\n if (glyph.flag && shouldRenderFlag) {\n const { y_top, y_bottom } = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n const flagX = this.getStemX();\n // FIXME: What's with the magic +/- 2\n const flagY = this.getStemDirection() === Stem.DOWN\n // Down stems have flags on the left\n ? y_top - noteStemHeight + 2\n // Up stems have flags on the eft.\n : y_bottom - noteStemHeight - 2;\n\n // Draw the Flag\n ctx.openGroup('flag', null, { pointerBBox: true });\n this.applyStyle(ctx, this.getFlagStyle() || false);\n this.flag.render(ctx, flagX, flagY);\n this.restoreStyle(ctx, this.getFlagStyle() || false);\n ctx.closeGroup();\n }\n }\n\n // Draw the NoteHeads\n drawNoteHeads() {\n this.note_heads.forEach(notehead => {\n this.context.openGroup('notehead', null, { pointerBBox: true });\n notehead.setContext(this.context).draw();\n this.context.closeGroup();\n });\n }\n\n drawStem(stemStruct) {\n // GCR TODO: I can't find any context in which this is called with the stemStruct\n // argument in the codebase or tests. Nor can I find a case where super.drawStem\n // is called at all. Perhaps these should be removed?\n if (!this.context) {\n throw new Vex.RERR('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n\n if (stemStruct) {\n this.setStem(new Stem(stemStruct));\n }\n\n this.context.openGroup('stem', null, { pointerBBox: true });\n this.stem.setContext(this.context).draw();\n this.context.closeGroup();\n }\n\n // Draws all the `StaveNote` parts. This is the main drawing method.\n draw() {\n if (!this.context) {\n throw new Vex.RERR('NoCanvasContext', \"Can't draw without a canvas context.\");\n }\n if (!this.stave) {\n throw new Vex.RERR('NoStave', \"Can't draw without a stave.\");\n }\n if (this.ys.length === 0) {\n throw new Vex.RERR('NoYValues', \"Can't draw note without Y values.\");\n }\n\n const xBegin = this.getNoteHeadBeginX();\n const shouldRenderStem = this.hasStem() && !this.beam;\n\n // Format note head x positions\n this.note_heads.forEach(notehead => notehead.setX(xBegin));\n\n // Format stem x positions\n const stemX = this.getStemX();\n this.stem.setNoteHeadXBounds(stemX, stemX);\n\n L('Rendering ', this.isChord() ? 'chord :' : 'note :', this.keys);\n\n // Draw each part of the note\n this.drawLedgerLines();\n\n // Apply the overall style -- may be contradicted by local settings:\n this.applyStyle();\n this.setAttribute('el', this.context.openGroup('stavenote', this.getAttribute('id')));\n this.context.openGroup('note', null, { pointerBBox: true });\n if (shouldRenderStem) this.drawStem();\n this.drawNoteHeads();\n this.drawFlag();\n this.context.closeGroup();\n this.drawModifiers();\n this.context.closeGroup();\n this.restoreStyle();\n this.setRendered();\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n// Author Larry Kuhns 2013\n// Class to draws string numbers into the notation.\n\nimport { Vex } from './vex';\nimport { Modifier } from './modifier';\n\n/**\n * @constructor\n */\nexport class FretHandFinger extends Modifier {\n static get CATEGORY() { return 'frethandfinger'; }\n\n // Arrange fingerings inside a ModifierContext.\n static format(nums, state) {\n const { left_shift, right_shift } = state;\n const num_spacing = 1;\n\n if (!nums || nums.length === 0) return false;\n\n const nums_list = [];\n let prev_note = null;\n let shiftLeft = 0;\n let shiftRight = 0;\n\n for (let i = 0; i < nums.length; ++i) {\n const num = nums[i];\n const note = num.getNote();\n const pos = num.getPosition();\n const props = note.getKeyProps()[num.getIndex()];\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shiftLeft = Math.max(note.getLeftDisplacedHeadPx(), shiftLeft);\n }\n if (right_shift === 0) {\n shiftRight = Math.max(note.getRightDisplacedHeadPx(), shiftRight);\n }\n }\n prev_note = note;\n }\n\n nums_list.push({\n note,\n num,\n pos,\n line: props.line,\n shiftL: shiftLeft,\n shiftR: shiftRight,\n });\n }\n\n // Sort fingernumbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n\n let numShiftL = 0;\n let numShiftR = 0;\n let xWidthL = 0;\n let xWidthR = 0;\n let lastLine = null;\n let lastNote = null;\n\n for (let i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n const { note, pos, num, line, shiftL, shiftR } = nums_list[i];\n\n // Reset the position of the string number every line.\n if (line !== lastLine || note !== lastNote) {\n numShiftL = left_shift + shiftL;\n numShiftR = right_shift + shiftR;\n }\n\n const numWidth = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift + numShiftL);\n num_shift = left_shift + numWidth; // spacing\n xWidthL = num_shift > xWidthL ? num_shift : xWidthL;\n } else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(numShiftR);\n num_shift = shiftRight + numWidth; // spacing\n xWidthR = num_shift > xWidthR ? num_shift : xWidthR;\n }\n lastLine = line;\n lastNote = note;\n }\n\n state.left_shift += xWidthL;\n state.right_shift += xWidthR;\n\n return true;\n }\n\n constructor(number) {\n super();\n this.setAttribute('type', 'FretHandFinger');\n\n this.note = null;\n this.index = null;\n this.finger = number;\n this.width = 7;\n this.position = Modifier.Position.LEFT; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.font = {\n family: 'sans-serif',\n size: 9,\n weight: 'bold',\n };\n }\n getCategory() { return FretHandFinger.CATEGORY; }\n setFretHandFinger(number) { this.finger = number; return this; }\n setOffsetX(x) { this.x_offset = x; return this; }\n setOffsetY(y) { this.y_offset = y; return this; }\n\n draw() {\n this.checkContext();\n\n if (!this.note || this.index == null) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw string number without a note and index.\");\n }\n\n this.setRendered();\n const ctx = this.context;\n const start = this.note.getModifierStartXY(this.position, this.index);\n let dot_x = start.x + this.x_shift + this.x_offset;\n let dot_y = start.y + this.y_shift + this.y_offset + 5;\n\n switch (this.position) {\n case Modifier.Position.ABOVE:\n dot_x -= 4;\n dot_y -= 12;\n break;\n case Modifier.Position.BELOW:\n dot_x -= 2;\n dot_y += 10;\n break;\n case Modifier.Position.LEFT:\n dot_x -= this.width;\n break;\n case Modifier.Position.RIGHT:\n dot_x += 1;\n break;\n default:\n throw new Vex.RERR('InvalidPostion', `The position ${this.position} does not exist`);\n }\n\n ctx.save();\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n ctx.fillText('' + this.finger, dot_x, dot_y);\n ctx.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements some standard music theory routines.\n\nimport { Vex } from './vex';\n\nexport class Music {\n static get NUM_TONES() {\n return 12;\n }\n\n static get roots() {\n return ['c', 'd', 'e', 'f', 'g', 'a', 'b'];\n }\n\n static get root_values() {\n return [0, 2, 4, 5, 7, 9, 11];\n }\n\n static get root_indices() {\n return {\n 'c': 0,\n 'd': 1,\n 'e': 2,\n 'f': 3,\n 'g': 4,\n 'a': 5,\n 'b': 6,\n };\n }\n\n static get canonical_notes() {\n return [\n 'c', 'c#', 'd', 'd#',\n 'e', 'f', 'f#', 'g',\n 'g#', 'a', 'a#', 'b',\n ];\n }\n\n static get diatonic_intervals() {\n return [\n 'unison', 'm2', 'M2', 'm3', 'M3',\n 'p4', 'dim5', 'p5', 'm6', 'M6',\n 'b7', 'M7', 'octave',\n ];\n }\n\n static get diatonic_accidentals() {\n return {\n 'unison': { note: 0, accidental: 0 },\n 'm2': { note: 1, accidental: -1 },\n 'M2': { note: 1, accidental: 0 },\n 'm3': { note: 2, accidental: -1 },\n 'M3': { note: 2, accidental: 0 },\n 'p4': { note: 3, accidental: 0 },\n 'dim5': { note: 4, accidental: -1 },\n 'p5': { note: 4, accidental: 0 },\n 'm6': { note: 5, accidental: -1 },\n 'M6': { note: 5, accidental: 0 },\n 'b7': { note: 6, accidental: -1 },\n 'M7': { note: 6, accidental: 0 },\n 'octave': { note: 7, accidental: 0 },\n };\n }\n\n static get intervals() {\n return {\n 'u': 0, 'unison': 0,\n 'm2': 1, 'b2': 1, 'min2': 1, 'S': 1, 'H': 1,\n '2': 2, 'M2': 2, 'maj2': 2, 'T': 2, 'W': 2,\n 'm3': 3, 'b3': 3, 'min3': 3,\n 'M3': 4, '3': 4, 'maj3': 4,\n '4': 5, 'p4': 5,\n '#4': 6, 'b5': 6, 'aug4': 6, 'dim5': 6,\n '5': 7, 'p5': 7,\n '#5': 8, 'b6': 8, 'aug5': 8,\n '6': 9, 'M6': 9, 'maj6': 9,\n 'b7': 10, 'm7': 10, 'min7': 10, 'dom7': 10,\n 'M7': 11, 'maj7': 11,\n '8': 12, 'octave': 12,\n };\n }\n\n static get scales() {\n return {\n major: [2, 2, 1, 2, 2, 2, 1],\n dorian: [2, 1, 2, 2, 2, 1, 2],\n mixolydian: [2, 2, 1, 2, 2, 1, 2],\n minor: [2, 1, 2, 2, 1, 2, 2],\n };\n }\n\n static get scaleTypes() {\n return {\n 'M': Music.scales.major,\n 'm': Music.scales.minor,\n };\n }\n\n static get accidentals() {\n return ['bb', 'b', 'n', '#', '##'];\n }\n\n static get noteValues() {\n return {\n 'c': { root_index: 0, int_val: 0 },\n 'cn': { root_index: 0, int_val: 0 },\n 'c#': { root_index: 0, int_val: 1 },\n 'c##': { root_index: 0, int_val: 2 },\n 'cb': { root_index: 0, int_val: 11 },\n 'cbb': { root_index: 0, int_val: 10 },\n 'd': { root_index: 1, int_val: 2 },\n 'dn': { root_index: 1, int_val: 2 },\n 'd#': { root_index: 1, int_val: 3 },\n 'd##': { root_index: 1, int_val: 4 },\n 'db': { root_index: 1, int_val: 1 },\n 'dbb': { root_index: 1, int_val: 0 },\n 'e': { root_index: 2, int_val: 4 },\n 'en': { root_index: 2, int_val: 4 },\n 'e#': { root_index: 2, int_val: 5 },\n 'e##': { root_index: 2, int_val: 6 },\n 'eb': { root_index: 2, int_val: 3 },\n 'ebb': { root_index: 2, int_val: 2 },\n 'f': { root_index: 3, int_val: 5 },\n 'fn': { root_index: 3, int_val: 5 },\n 'f#': { root_index: 3, int_val: 6 },\n 'f##': { root_index: 3, int_val: 7 },\n 'fb': { root_index: 3, int_val: 4 },\n 'fbb': { root_index: 3, int_val: 3 },\n 'g': { root_index: 4, int_val: 7 },\n 'gn': { root_index: 4, int_val: 7 },\n 'g#': { root_index: 4, int_val: 8 },\n 'g##': { root_index: 4, int_val: 9 },\n 'gb': { root_index: 4, int_val: 6 },\n 'gbb': { root_index: 4, int_val: 5 },\n 'a': { root_index: 5, int_val: 9 },\n 'an': { root_index: 5, int_val: 9 },\n 'a#': { root_index: 5, int_val: 10 },\n 'a##': { root_index: 5, int_val: 11 },\n 'ab': { root_index: 5, int_val: 8 },\n 'abb': { root_index: 5, int_val: 7 },\n 'b': { root_index: 6, int_val: 11 },\n 'bn': { root_index: 6, int_val: 11 },\n 'b#': { root_index: 6, int_val: 0 },\n 'b##': { root_index: 6, int_val: 1 },\n 'bb': { root_index: 6, int_val: 10 },\n 'bbb': { root_index: 6, int_val: 9 },\n };\n }\n\n isValidNoteValue(note) {\n if (note == null || note < 0 || note >= Music.NUM_TONES) {\n return false;\n }\n return true;\n }\n\n isValidIntervalValue(interval) {\n return this.isValidNoteValue(interval);\n }\n\n getNoteParts(noteString) {\n if (!noteString || noteString.length < 1) {\n throw new Vex.RERR('BadArguments', 'Invalid note name: ' + noteString);\n }\n\n if (noteString.length > 3) {\n throw new Vex.RERR('BadArguments', 'Invalid note name: ' + noteString);\n }\n\n const note = noteString.toLowerCase();\n\n const regex = /^([cdefgab])(b|bb|n|#|##)?$/;\n const match = regex.exec(note);\n\n if (match != null) {\n const root = match[1];\n const accidental = match[2];\n\n return {\n root,\n accidental,\n };\n } else {\n throw new Vex.RERR('BadArguments', 'Invalid note name: ' + noteString);\n }\n }\n\n getKeyParts(keyString) {\n if (!keyString || keyString.length < 1) {\n throw new Vex.RERR('BadArguments', 'Invalid key: ' + keyString);\n }\n\n const key = keyString.toLowerCase();\n\n // Support Major, Minor, Melodic Minor, and Harmonic Minor key types.\n const regex = /^([cdefgab])(b|#)?(mel|harm|m|M)?$/;\n const match = regex.exec(key);\n\n if (match != null) {\n const root = match[1];\n const accidental = match[2];\n let type = match[3];\n\n // Unspecified type implies major\n if (!type) type = 'M';\n\n return {\n root,\n accidental,\n type,\n };\n } else {\n throw new Vex.RERR('BadArguments', `Invalid key: ${keyString}`);\n }\n }\n\n getNoteValue(noteString) {\n const value = Music.noteValues[noteString];\n if (value == null) {\n throw new Vex.RERR('BadArguments', `Invalid note name: ${noteString}`);\n }\n\n return value.int_val;\n }\n\n getIntervalValue(intervalString) {\n const value = Music.intervals[intervalString];\n if (value == null) {\n throw new Vex.RERR('BadArguments', `Invalid interval name: ${intervalString}`);\n }\n\n return value;\n }\n\n getCanonicalNoteName(noteValue) {\n if (!this.isValidNoteValue(noteValue)) {\n throw new Vex.RERR('BadArguments', `Invalid note value: ${noteValue}`);\n }\n\n return Music.canonical_notes[noteValue];\n }\n\n getCanonicalIntervalName(intervalValue) {\n if (!this.isValidIntervalValue(intervalValue)) {\n throw new Vex.RERR('BadArguments', `Invalid interval value: ${intervalValue}`);\n }\n\n return Music.diatonic_intervals[intervalValue];\n }\n\n /* Given a note, interval, and interval direction, product the\n * relative note.\n */\n getRelativeNoteValue(noteValue, intervalValue, direction) {\n if (direction == null) direction = 1;\n\n if (direction !== 1 && direction !== -1) {\n throw new Vex.RERR('BadArguments', `Invalid direction: ${direction}`);\n }\n\n let sum = (noteValue + (direction * intervalValue)) % Music.NUM_TONES;\n if (sum < 0) sum += Music.NUM_TONES;\n\n return sum;\n }\n\n getRelativeNoteName(root, noteValue) {\n const parts = this.getNoteParts(root);\n const rootValue = this.getNoteValue(parts.root);\n let interval = noteValue - rootValue;\n\n if (Math.abs(interval) > Music.NUM_TONES - 3) {\n let multiplier = 1;\n if (interval > 0) multiplier = -1;\n\n // Possibly wrap around. (Add +1 for modulo operator)\n const reverse_interval = (((noteValue + 1) + (rootValue + 1)) %\n Music.NUM_TONES) * multiplier;\n\n if (Math.abs(reverse_interval) > 2) {\n throw new Vex.RERR('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n } else {\n interval = reverse_interval;\n }\n }\n\n if (Math.abs(interval) > 2) {\n throw new Vex.RERR('BadArguments', `Notes not related: ${root}, ${noteValue})`);\n }\n\n let relativeNoteName = parts.root;\n if (interval > 0) {\n for (let i = 1; i <= interval; ++i) {\n relativeNoteName += '#';\n }\n } else if (interval < 0) {\n for (let i = -1; i >= interval; --i) {\n relativeNoteName += 'b';\n }\n }\n\n return relativeNoteName;\n }\n\n /* Return scale tones, given intervals. Each successive interval is\n * relative to the previous one, e.g., Major Scale:\n *\n * TTSTTTS = [2,2,1,2,2,2,1]\n *\n * When used with key = 0, returns C scale (which is isomorphic to\n * interval list).\n */\n getScaleTones(key, intervals) {\n const tones = [key];\n\n let nextNote = key;\n for (let i = 0; i < intervals.length; i += 1) {\n nextNote = this.getRelativeNoteValue(nextNote, intervals[i]);\n if (nextNote !== key) tones.push(nextNote);\n }\n\n return tones;\n }\n\n /* Returns the interval of a note, given a diatonic scale.\n *\n * E.g., Given the scale C, and the note E, returns M3\n */\n getIntervalBetween(note1, note2, direction) {\n if (direction == null) direction = 1;\n\n if (direction !== 1 && direction !== -1) {\n throw new Vex.RERR('BadArguments', `Invalid direction: ${direction}`);\n }\n\n if (!this.isValidNoteValue(note1) || !this.isValidNoteValue(note2)) {\n throw new Vex.RERR('BadArguments', `Invalid notes: ${note1}, ${note2}`);\n }\n\n let difference = direction === 1\n ? note2 - note1\n : note1 - note2;\n\n if (difference < 0) difference += Music.NUM_TONES;\n\n return difference;\n }\n\n // Create a scale map that represents the pitch state for a\n // `keySignature`. For example, passing a `G` to `keySignature` would\n // return a scale map with every note naturalized except for `F` which\n // has an `F#` state.\n createScaleMap(keySignature) {\n const keySigParts = this.getKeyParts(keySignature);\n const scaleName = Music.scaleTypes[keySigParts.type];\n\n let keySigString = keySigParts.root;\n if (keySigParts.accidental) keySigString += keySigParts.accidental;\n\n if (!scaleName) throw new Vex.RERR('BadArguments', 'Unsupported key type: ' + keySignature);\n\n const scale = this.getScaleTones(this.getNoteValue(keySigString), scaleName);\n const noteLocation = Music.root_indices[keySigParts.root];\n\n const scaleMap = {};\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n let noteName = this.getRelativeNoteName(rootName, scale[i]);\n\n if (noteName.length === 1) {\n noteName += 'n';\n }\n\n scaleMap[rootName] = noteName;\n }\n\n return scaleMap;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n// @author Greg Ristow (modifications)\n//\n// ## Description\n//\n// This file implements accidentals as modifiers that can be attached to\n// notes. Support is included for both western and microtonal accidentals.\n//\n// See `tests/accidental_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Fraction } from './fraction';\nimport { Flow } from './tables';\nimport { Music } from './music';\nimport { Modifier } from './modifier';\nimport { Glyph } from './glyph';\n\n// To enable logging for this class. Set `Vex.Flow.Accidental.DEBUG` to `true`.\nfunction L(...args) { if (Accidental.DEBUG) Vex.L('Vex.Flow.Accidental', args); }\n\nconst getGlyphWidth = glyph => glyph.getMetrics().width;\n\n// An `Accidental` inherits from `Modifier`, and is formatted within a\n// `ModifierContext`.\nexport class Accidental extends Modifier {\n static get CATEGORY() { return 'accidentals'; }\n\n // Arrange accidentals inside a ModifierContext.\n static format(accidentals, state) {\n const noteheadAccidentalPadding = 1;\n const leftShift = state.left_shift + noteheadAccidentalPadding;\n const accidentalSpacing = 3;\n\n // If there are no accidentals, we needn't format their positions\n if (!accidentals || accidentals.length === 0) return;\n\n const accList = [];\n let prevNote = null;\n let shiftL = 0;\n\n // First determine the accidentals' Y positions from the note.keys\n for (let i = 0; i < accidentals.length; ++i) {\n const acc = accidentals[i];\n const note = acc.getNote();\n const stave = note.getStave();\n const props = note.getKeyProps()[acc.getIndex()];\n if (note !== prevNote) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prevNote = note;\n }\n if (stave !== null) {\n const lineSpace = stave.options.spacing_between_lines_px;\n const y = stave.getYForLine(props.line);\n const accLine = Math.round(y / lineSpace * 2) / 2;\n accList.push({ y, line: accLine, shift: shiftL, acc, lineSpace });\n } else {\n accList.push({ line: props.line, shift: shiftL, acc });\n }\n }\n\n // Sort accidentals by line number.\n accList.sort((a, b) => b.line - a.line);\n\n // FIXME: Confusing name. Each object in this array has a property called `line`.\n // So if this is a list of lines, you end up with: `line.line` which is very awkward.\n const lineList = [];\n\n // amount by which all accidentals must be shifted right or left for\n // stem flipping, notehead shifting concerns.\n let accShift = 0;\n let previousLine = null;\n\n // Create an array of unique line numbers (lineList) from accList\n for (let i = 0; i < accList.length; i++) {\n const acc = accList[i];\n\n // if this is the first line, or a new line, add a lineList\n if (previousLine === null || previousLine !== acc.line) {\n lineList.push({\n line: acc.line,\n flatLine: true,\n dblSharpLine: true,\n numAcc: 0,\n width: 0,\n });\n }\n // if this accidental is not a flat, the accidental needs 3.0 lines lower\n // clearance instead of 2.5 lines for b or bb.\n // FIXME: Naming could use work. acc.acc is very awkward\n if (acc.acc.type !== 'b' && acc.acc.type !== 'bb') {\n lineList[lineList.length - 1].flatLine = false;\n }\n\n // if this accidental is not a double sharp, the accidental needs 3.0 lines above\n if (acc.acc.type !== '##') {\n lineList[lineList.length - 1].dblSharpLine = false;\n }\n\n // Track how many accidentals are on this line:\n lineList[lineList.length - 1].numAcc++;\n\n // Track the total x_offset needed for this line which will be needed\n // for formatting lines w/ multiple accidentals:\n\n // width = accidental width + universal spacing between accidentals\n lineList[lineList.length - 1].width += acc.acc.getWidth() + accidentalSpacing;\n\n // if this accShift is larger, use it to keep first column accidentals in the same line\n accShift = acc.shift > accShift ? acc.shift : accShift;\n\n previousLine = acc.line;\n }\n\n // ### Place Accidentals in Columns\n //\n // Default to a classic triangular layout (middle accidental farthest left),\n // but follow exceptions as outlined in G. Read's _Music Notation_ and\n // Elaine Gould's _Behind Bars_.\n //\n // Additionally, this implements different vertical collision rules for\n // flats (only need 2.5 lines clearance below) and double sharps (only\n // need 2.5 lines of clearance above or below).\n //\n // Classic layouts and exception patterns are found in the 'tables.js'\n // in 'Vex.Flow.accidentalColumnsTable'\n //\n // Beyond 6 vertical accidentals, default to the parallel ascending lines approach,\n // using as few columns as possible for the verticle structure.\n //\n // TODO (?): Allow column to be specified for an accidental at run-time?\n\n let totalColumns = 0;\n\n // establish the boundaries for a group of notes with clashing accidentals:\n for (let i = 0; i < lineList.length; i++) {\n let noFurtherConflicts = false;\n const groupStart = i;\n let groupEnd = i;\n\n while (groupEnd + 1 < lineList.length && !noFurtherConflicts) {\n // if this note conflicts with the next:\n if (this.checkCollision(lineList[groupEnd], lineList[groupEnd + 1])) {\n // include the next note in the group:\n groupEnd++;\n } else {\n noFurtherConflicts = true;\n }\n }\n\n // Gets an a line from the `lineList`, relative to the current group\n const getGroupLine = (index) => lineList[groupStart + index];\n const getGroupLines = (indexes) => indexes.map(getGroupLine);\n const lineDifference = (indexA, indexB) => {\n const [a, b] = getGroupLines([indexA, indexB]).map(item => item.line);\n return a - b;\n };\n\n const notColliding = (...indexPairs) =>\n indexPairs\n .map(getGroupLines)\n .every(lines => !this.checkCollision(...lines));\n\n // Set columns for the lines in this group:\n const groupLength = groupEnd - groupStart + 1;\n\n // Set the accidental column for each line of the group\n let endCase = this.checkCollision(lineList[groupStart], lineList[groupEnd]) ? 'a' : 'b';\n\n switch (groupLength) {\n case 3:\n if (endCase === 'a' && lineDifference(1, 2) === 0.5 && lineDifference(0, 1) !== 0.5) {\n endCase = 'second_on_bottom';\n }\n break;\n case 4:\n if (notColliding([0, 2], [1, 3])) {\n endCase = 'spaced_out_tetrachord';\n }\n break;\n case 5:\n if (endCase === 'b' && notColliding([1, 3])) {\n endCase = 'spaced_out_pentachord';\n if (notColliding([0, 2], [2, 4])) {\n endCase = 'very_spaced_out_pentachord';\n }\n }\n break;\n case 6:\n if (notColliding([0, 3], [1, 4], [2, 5])) {\n endCase = 'spaced_out_hexachord';\n }\n if (notColliding([0, 2], [2, 4], [1, 3], [3, 5])) {\n endCase = 'very_spaced_out_hexachord';\n }\n break;\n default:\n break;\n }\n\n let groupMember;\n let column;\n // If the group contains more than seven members, use ascending parallel lines\n // of accidentals, using as few columns as possible while avoiding collisions.\n if (groupLength >= 7) {\n // First, determine how many columns to use:\n let patternLength = 2;\n let collisionDetected = true;\n while (collisionDetected === true) {\n collisionDetected = false;\n for (let line = 0; line + patternLength < lineList.length; line++) {\n if (this.checkCollision(lineList[line], lineList[line + patternLength])) {\n collisionDetected = true;\n patternLength++;\n break;\n }\n }\n }\n // Then, assign a column to each line of accidentals\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = ((groupMember - i) % patternLength) + 1;\n lineList[groupMember].column = column;\n totalColumns = (totalColumns > column) ? totalColumns : column;\n }\n\n // Otherwise, if the group contains fewer than seven members, use the layouts from\n // the accidentalsColumnsTable housed in tables.js.\n } else {\n for (groupMember = i; groupMember <= groupEnd; groupMember++) {\n column = Flow.accidentalColumnsTable[groupLength][endCase][groupMember - i];\n lineList[groupMember].column = column;\n totalColumns = (totalColumns > column) ? totalColumns : column;\n }\n }\n\n // Increment i to the last note that was set, so that if a lower set of notes\n // does not conflict at all with this group, it can have its own classic shape.\n i = groupEnd;\n }\n\n // ### Convert Columns to x_offsets\n //\n // This keeps columns aligned, even if they have different accidentals within them\n // which sometimes results in a larger x_offset than is an accidental might need\n // to preserve the symmetry of the accidental shape.\n //\n // Neither A.C. Vinci nor G. Read address this, and it typically only happens in\n // music with complex chord clusters.\n //\n // TODO (?): Optionally allow closer compression of accidentals, instead of forcing\n // parallel columns.\n\n // track each column's max width, which will be used as initial shift of later columns:\n const columnWidths = [];\n const columnXOffsets = [];\n for (let i = 0; i <= totalColumns; i++) {\n columnWidths[i] = 0;\n columnXOffsets[i] = 0;\n }\n\n columnWidths[0] = accShift + leftShift;\n columnXOffsets[0] = accShift + leftShift;\n\n // Fill columnWidths with widest needed x-space;\n // this is what keeps the columns parallel.\n lineList.forEach(line => {\n if (line.width > columnWidths[line.column]) columnWidths[line.column] = line.width;\n });\n\n for (let i = 1; i < columnWidths.length; i++) {\n // this column's offset = this column's width + previous column's offset\n columnXOffsets[i] = columnWidths[i] + columnXOffsets[i - 1];\n }\n\n const totalShift = columnXOffsets[columnXOffsets.length - 1];\n // Set the xShift for each accidental according to column offsets:\n let accCount = 0;\n lineList.forEach(line => {\n let lineWidth = 0;\n const lastAccOnLine = accCount + line.numAcc;\n // handle all of the accidentals on a given line:\n for (accCount; accCount < lastAccOnLine; accCount++) {\n const xShift = (columnXOffsets[line.column - 1] + lineWidth);\n accList[accCount].acc.setXShift(xShift);\n // keep track of the width of accidentals we've added so far, so that when\n // we loop, we add space for them.\n lineWidth += accList[accCount].acc.getWidth() + accidentalSpacing;\n L('Line, accCount, shift: ', line.line, accCount, xShift);\n }\n });\n\n // update the overall layout with the full width of the accidental shapes:\n state.left_shift += totalShift;\n }\n\n // Helper function to determine whether two lines of accidentals collide vertically\n static checkCollision(line1, line2) {\n let clearance = line2.line - line1.line;\n let clearanceRequired = 3;\n // But less clearance is required for certain accidentals: b, bb and ##.\n if (clearance > 0) { // then line 2 is on top\n clearanceRequired = (line2.flatLine || line2.dblSharpLine) ? 2.5 : 3.0;\n if (line1.dblSharpLine) clearance -= 0.5;\n } else { // line 1 is on top\n clearanceRequired = (line1.flatLine || line1.dblSharpLine) ? 2.5 : 3.0;\n if (line2.dblSharpLine) clearance -= 0.5;\n }\n const collision = Math.abs(clearance) < clearanceRequired;\n L('Line_1, Line_2, Collision: ', line1.line, line2.line, collision);\n return collision;\n }\n\n // Use this method to automatically apply accidentals to a set of `voices`.\n // The accidentals will be remembered between all the voices provided.\n // Optionally, you can also provide an initial `keySignature`.\n static applyAccidentals(voices, keySignature) {\n const tickPositions = [];\n const tickNoteMap = {};\n\n // Sort the tickables in each voice by their tick position in the voice\n voices.forEach(voice => {\n const tickPosition = new Fraction(0, 1);\n const notes = voice.getTickables();\n notes.forEach(note => {\n if (note.shouldIgnoreTicks()) return;\n\n const notesAtPosition = tickNoteMap[tickPosition.value()];\n\n if (!notesAtPosition) {\n tickPositions.push(tickPosition.value());\n tickNoteMap[tickPosition.value()] = [note];\n } else {\n notesAtPosition.push(note);\n }\n\n tickPosition.add(note.getTicks());\n });\n });\n\n const music = new Music();\n\n // Default key signature is C major\n if (!keySignature) keySignature = 'C';\n\n // Get the scale map, which represents the current state of each pitch\n const scaleMap = music.createScaleMap(keySignature);\n\n tickPositions.forEach(tick => {\n const notes = tickNoteMap[tick];\n\n // Array to store all pitches that modified accidental states\n // at this tick position\n const modifiedPitches = [];\n\n const processNote = (note) => {\n if (note.isRest() || note.shouldIgnoreTicks()) return;\n\n // Go through each key and determine if an accidental should be\n // applied\n note.keys.forEach((keyString, keyIndex) => {\n const key = music.getNoteParts(keyString.split('/')[0]);\n\n // Force a natural for every key without an accidental\n const accidentalString = key.accidental || 'n';\n const pitch = key.root + accidentalString;\n\n // Determine if the current pitch has the same accidental\n // as the scale state\n const sameAccidental = scaleMap[key.root] === pitch;\n\n // Determine if an identical pitch in the chord already\n // modified the accidental state\n const previouslyModified = modifiedPitches.indexOf(pitch) > -1;\n\n // Add the accidental to the StaveNote\n if (!sameAccidental || (sameAccidental && previouslyModified)) {\n // Modify the scale map so that the root pitch has an\n // updated state\n scaleMap[key.root] = pitch;\n\n // Create the accidental\n const accidental = new Accidental(accidentalString);\n\n // Attach the accidental to the StaveNote\n note.addAccidental(keyIndex, accidental);\n\n // Add the pitch to list of pitches that modified accidentals\n modifiedPitches.push(pitch);\n }\n });\n\n // process grace notes\n note.getModifiers().forEach(modifier => {\n if (modifier.getCategory() === 'gracenotegroups') {\n modifier.getGraceNotes().forEach(processNote);\n }\n });\n };\n\n notes.forEach(processNote);\n });\n }\n\n // Create accidental. `type` can be a value from the\n // `Vex.Flow.accidentalCodes.accidentals` table in `tables.js`. For\n // example: `#`, `##`, `b`, `n`, etc.\n constructor(type = null) {\n super();\n this.setAttribute('type', 'Accidental');\n\n L('New accidental: ', type);\n\n this.note = null;\n // The `index` points to a specific note in a chord.\n this.index = null;\n this.type = type;\n this.position = Modifier.Position.LEFT;\n\n this.render_options = {\n // Font size for glyphs\n font_scale: 38,\n\n // Length of stroke across heads above or below the stave.\n stroke_px: 3,\n\n // Padding between accidental and parentheses on each side\n parenLeftPadding: 2,\n parenRightPadding: 2,\n };\n\n this.accidental = Flow.accidentalCodes(this.type);\n if (!this.accidental) {\n throw new Vex.RERR('ArgumentError', `Unknown accidental type: ${type}`);\n }\n\n // Cautionary accidentals have parentheses around them\n this.cautionary = false;\n this.parenLeft = null;\n this.parenRight = null;\n\n this.reset();\n }\n\n reset() {\n const fontScale = this.render_options.font_scale;\n this.glyph = new Glyph(this.accidental.code, fontScale);\n this.glyph.setOriginX(1.0);\n\n if (this.cautionary) {\n this.parenLeft = new Glyph(Flow.accidentalCodes('{').code, fontScale);\n this.parenRight = new Glyph(Flow.accidentalCodes('}').code, fontScale);\n this.parenLeft.setOriginX(1.0);\n this.parenRight.setOriginX(1.0);\n }\n }\n\n getCategory() { return Accidental.CATEGORY; }\n\n getWidth() {\n const parenWidth = this.cautionary\n ? (\n getGlyphWidth(this.parenLeft) +\n getGlyphWidth(this.parenRight) +\n this.render_options.parenLeftPadding +\n this.render_options.parenRightPadding\n )\n : 0;\n\n return getGlyphWidth(this.glyph) + parenWidth;\n }\n\n // Attach this accidental to `note`, which must be a `StaveNote`.\n setNote(note) {\n if (!note) {\n throw new Vex.RERR('ArgumentError', `Bad note value: ${note}`);\n }\n\n this.note = note;\n\n // Accidentals attached to grace notes are rendered smaller.\n if (this.note.getCategory() === 'gracenotes') {\n this.render_options.font_scale = 25;\n this.reset();\n }\n }\n\n // If called, draws parenthesis around accidental.\n setAsCautionary() {\n this.cautionary = true;\n this.render_options.font_scale = 28;\n this.reset();\n return this;\n }\n\n // Render accidental onto canvas.\n draw() {\n const {\n context,\n type, position, note, index, cautionary,\n x_shift, y_shift,\n glyph, parenLeft, parenRight,\n render_options: { parenLeftPadding, parenRightPadding },\n } = this;\n\n this.checkContext();\n\n if (!(note && (index != null))) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw accidental without a note and index.\");\n }\n\n // Figure out the start `x` and `y` coordinates for note and index.\n const start = note.getModifierStartXY(position, index);\n let accX = start.x + x_shift;\n const accY = start.y + y_shift;\n L('Rendering: ', type, accX, accY);\n\n if (!cautionary) {\n glyph.render(context, accX, accY);\n } else {\n // Render the accidental in parentheses.\n parenRight.render(context, accX, accY);\n accX -= getGlyphWidth(parenRight);\n accX -= parenRightPadding;\n accX -= this.accidental.parenRightPaddingAdjustment;\n glyph.render(context, accX, accY);\n accX -= getGlyphWidth(glyph);\n accX -= parenLeftPadding;\n parenLeft.render(context, accX, accY);\n }\n\n this.setRendered();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2016\n//\n// ## Description\n//\n// This file implements `NoteSubGroup` which is used to format and\n// render notes as a `Modifier`\n// ex) ClefNote, TimeSigNote and BarNote.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\nimport { Formatter } from './formatter';\nimport { Voice } from './voice';\n\nexport class NoteSubGroup extends Modifier {\n static get CATEGORY() { return 'notesubgroup'; }\n\n // Arrange groups inside a `ModifierContext`\n static format(groups, state) {\n if (!groups || groups.length === 0) return false;\n\n let width = 0;\n for (let i = 0; i < groups.length; ++i) {\n const group = groups[i];\n group.preFormat();\n width += group.getWidth();\n }\n\n state.left_shift += width;\n return true;\n }\n\n constructor(subNotes) {\n super();\n this.setAttribute('type', 'NoteSubGroup');\n\n this.note = null;\n this.index = null;\n this.position = Modifier.Position.LEFT;\n this.subNotes = subNotes;\n this.subNotes.forEach(subNote => { subNote.ignore_ticks = false; });\n this.width = 0;\n this.preFormatted = false;\n\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Flow.RESOLUTION,\n }).setStrict(false);\n\n this.voice.addTickables(this.subNotes);\n\n return this;\n }\n\n getCategory() { return NoteSubGroup.CATEGORY; }\n\n preFormat() {\n if (this.preFormatted) return;\n\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n\n setNote(note) {\n this.note = note;\n }\n setWidth(width) {\n this.width = width;\n }\n getWidth() {\n return this.width;\n }\n\n draw() {\n this.checkContext();\n\n const note = this.getNote();\n\n if (!(note && (this.index !== null))) {\n throw new Vex.RuntimeError('NoAttachedNote',\n \"Can't draw notes without a parent note and parent note index.\");\n }\n\n this.setRendered();\n this.alignSubNotesWithNote(this.subNotes, note); // Modifier function\n\n // Draw notes\n this.subNotes.forEach(subNote => subNote.setContext(this.context).drawWithStyle());\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\n\nexport class StaveTie extends Element {\n constructor(notes, text) {\n /**\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n **/\n super();\n this.setAttribute('type', 'StaveTie');\n this.notes = notes;\n this.context = null;\n this.text = text;\n this.direction = null;\n\n this.render_options = {\n cp1: 8, // Curve control point 1\n cp2: 12, // Curve control point 2\n text_shift_x: 0,\n first_x_shift: 0,\n last_x_shift: 0,\n y_shift: 7,\n tie_spacing: 0,\n font: { family: 'Arial', size: 10, style: '' },\n };\n\n this.font = this.render_options.font;\n this.setNotes(notes);\n }\n\n setFont(font) { this.font = font; return this; }\n setDirection(direction) { this.direction = direction; return this; }\n\n /**\n * Set the notes to attach this tie to.\n *\n * @param {!Object} notes The notes to tie up.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new Vex.RuntimeError(\n 'BadArguments', 'Tie needs to have either first_note or last_note set.'\n );\n }\n\n if (!notes.first_indices) notes.first_indices = [0];\n if (!notes.last_indices) notes.last_indices = [0];\n\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new Vex.RuntimeError('BadArguments', 'Tied notes must have similar index sizes');\n }\n\n // Success. Lets grab 'em notes.\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return (!this.first_note || !this.last_note);\n }\n\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new Vex.RERR('BadArguments', 'No Y-values to render');\n }\n\n const ctx = this.context;\n let cp1 = this.render_options.cp1;\n let cp2 = this.render_options.cp2;\n\n if (Math.abs(params.last_x_px - params.first_x_px) < 10) {\n cp1 = 2; cp2 = 8;\n }\n\n const first_x_shift = this.render_options.first_x_shift;\n const last_x_shift = this.render_options.last_x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n\n for (let i = 0; i < this.first_indices.length; ++i) {\n const cp_x = ((params.last_x_px + last_x_shift) +\n (params.first_x_px + first_x_shift)) / 2;\n const first_y_px = params.first_ys[this.first_indices[i]] + y_shift;\n const last_y_px = params.last_ys[this.last_indices[i]] + y_shift;\n\n if (isNaN(first_y_px) || isNaN(last_y_px)) {\n throw new Vex.RERR('BadArguments', 'Bad indices for tie rendering.');\n }\n\n const top_cp_y = ((first_y_px + last_y_px) / 2) + (cp1 * params.direction);\n const bottom_cp_y = ((first_y_px + last_y_px) / 2) + (cp2 * params.direction);\n\n ctx.beginPath();\n ctx.moveTo(params.first_x_px + first_x_shift, first_y_px);\n ctx.quadraticCurveTo(cp_x, top_cp_y, params.last_x_px + last_x_shift, last_y_px);\n ctx.quadraticCurveTo(cp_x, bottom_cp_y, params.first_x_px + first_x_shift, first_y_px);\n ctx.closePath();\n ctx.fill();\n }\n }\n\n renderText(first_x_px, last_x_px) {\n if (!this.text) return;\n let center_x = (first_x_px + last_x_px) / 2;\n center_x -= this.context.measureText(this.text).width / 2;\n\n this.context.save();\n this.context.setFont(this.font.family, this.font.size, this.font.style);\n this.context.fillText(\n this.text,\n center_x + this.render_options.text_shift_x,\n (this.first_note || this.last_note).getStave().getYForTopText() - 1\n );\n this.context.restore();\n }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n const first_note = this.first_note;\n const last_note = this.last_note;\n\n let first_x_px;\n let last_x_px;\n let first_ys;\n let last_ys;\n let stem_direction;\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n stem_direction = first_note.getStemDirection();\n first_ys = first_note.getYs();\n } else {\n first_x_px = last_note.getStave().getTieStartX();\n first_ys = last_note.getYs();\n this.first_indices = this.last_indices;\n }\n\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n stem_direction = last_note.getStemDirection();\n last_ys = last_note.getYs();\n } else {\n last_x_px = first_note.getStave().getTieEndX();\n last_ys = first_note.getYs();\n this.last_indices = this.first_indices;\n }\n\n if (this.direction) {\n stem_direction = this.direction;\n }\n\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: stem_direction,\n });\n\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n","// / [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\nimport { StaveTie } from './stavetie';\n\nexport class TabTie extends StaveTie {\n static createHammeron(notes) {\n return new TabTie(notes, 'H');\n }\n\n static createPulloff(notes) {\n return new TabTie(notes, 'P');\n }\n\n constructor(notes, text) {\n /**\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n **/\n super(notes, text);\n this.setAttribute('type', 'TabTie');\n\n this.render_options.cp1 = 9;\n this.render_options.cp2 = 11;\n this.render_options.y_shift = 3;\n\n this.setNotes(notes);\n }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n const first_note = this.first_note;\n const last_note = this.last_note;\n let first_x_px;\n let last_x_px;\n let first_ys;\n let last_ys;\n\n if (first_note) {\n first_x_px = first_note.getTieRightX() + this.render_options.tie_spacing;\n first_ys = first_note.getYs();\n } else {\n first_x_px = last_note.getStave().getTieStartX();\n first_ys = last_note.getYs();\n this.first_indices = this.last_indices;\n }\n\n if (last_note) {\n last_x_px = last_note.getTieLeftX() + this.render_options.tie_spacing;\n last_ys = last_note.getYs();\n } else {\n last_x_px = first_note.getStave().getTieEndX();\n last_ys = first_note.getYs();\n this.last_indices = this.first_indices;\n }\n\n this.renderTie({\n first_x_px,\n last_x_px,\n first_ys,\n last_ys,\n direction: -1, // Tab tie's are always face up.\n });\n\n this.renderText(first_x_px, last_x_px);\n return true;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `GraceNoteGroup` which is used to format and\n// render grace notes.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\nimport { Formatter } from './formatter';\nimport { Voice } from './voice';\nimport { Beam } from './beam';\nimport { StaveTie } from './stavetie';\nimport { TabTie } from './tabtie';\nimport { StaveNote } from './stavenote';\n\n// To enable logging for this class. Set `Vex.Flow.GraceNoteGroup.DEBUG` to `true`.\nfunction L(...args) { if (GraceNoteGroup.DEBUG) Vex.L('Vex.Flow.GraceNoteGroup', args); }\n\nexport class GraceNoteGroup extends Modifier {\n static get CATEGORY() { return 'gracenotegroups'; }\n\n // Arrange groups inside a `ModifierContext`\n static format(gracenote_groups, state) {\n const group_spacing_stave = 4;\n const group_spacing_tab = 0;\n\n if (!gracenote_groups || gracenote_groups.length === 0) return false;\n\n const group_list = [];\n let prev_note = null;\n let shiftL = 0;\n\n for (let i = 0; i < gracenote_groups.length; ++i) {\n const gracenote_group = gracenote_groups[i];\n const note = gracenote_group.getNote();\n const is_stavenote = (note.getCategory() === StaveNote.CATEGORY);\n const spacing = (is_stavenote ? group_spacing_stave : group_spacing_tab);\n\n if (is_stavenote && note !== prev_note) {\n // Iterate through all notes to get the displaced pixels\n for (let n = 0; n < note.keys.length; ++n) {\n shiftL = Math.max(note.getLeftDisplacedHeadPx(), shiftL);\n }\n prev_note = note;\n }\n\n group_list.push({ shift: shiftL, gracenote_group, spacing });\n }\n\n // If first note left shift in case it is displaced\n let group_shift = group_list[0].shift;\n let formatWidth;\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n gracenote_group.preFormat();\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n group_shift = Math.max(formatWidth, group_shift);\n }\n\n for (let i = 0; i < group_list.length; ++i) {\n const gracenote_group = group_list[i].gracenote_group;\n formatWidth = gracenote_group.getWidth() + group_list[i].spacing;\n gracenote_group.setSpacingFromNextModifier(group_shift - Math.min(formatWidth, group_shift));\n }\n\n state.left_shift += group_shift;\n return true;\n }\n\n // ## Prototype Methods\n //\n // `GraceNoteGroup` inherits from `Modifier` and is placed inside a\n // `ModifierContext`.\n constructor(grace_notes, show_slur) {\n super();\n this.setAttribute('type', 'GraceNoteGroup');\n\n this.note = null;\n this.index = null;\n this.position = Modifier.Position.LEFT;\n this.grace_notes = grace_notes;\n this.width = 0;\n\n this.preFormatted = false;\n\n this.show_slur = show_slur;\n this.slur = null;\n\n this.formatter = new Formatter();\n this.voice = new Voice({\n num_beats: 4,\n beat_value: 4,\n resolution: Flow.RESOLUTION,\n }).setStrict(false);\n\n this.render_options = {\n slur_y_shift: 0,\n };\n\n this.beams = [];\n\n this.voice.addTickables(this.grace_notes);\n\n return this;\n }\n\n getCategory() { return GraceNoteGroup.CATEGORY; }\n\n preFormat() {\n if (this.preFormatted) return;\n\n this.formatter.joinVoices([this.voice]).format([this.voice], 0);\n this.setWidth(this.formatter.getMinTotalWidth());\n this.preFormatted = true;\n }\n\n beamNotes(grace_notes) {\n grace_notes = grace_notes || this.grace_notes;\n if (grace_notes.length > 1) {\n const beam = new Beam(grace_notes);\n\n beam.render_options.beam_width = 3;\n beam.render_options.partial_beam_length = 4;\n\n this.beams.push(beam);\n }\n\n return this;\n }\n\n setNote(note) {\n this.note = note;\n }\n setWidth(width) {\n this.width = width;\n }\n getWidth() {\n return this.width;\n }\n getGraceNotes() {\n return this.grace_notes;\n }\n draw() {\n this.checkContext();\n\n const note = this.getNote();\n\n L('Drawing grace note group for:', note);\n\n if (!(note && (this.index !== null))) {\n throw new Vex.RuntimeError('NoAttachedNote',\n \"Can't draw grace note without a parent note and parent note index.\");\n }\n\n this.setRendered();\n this.alignSubNotesWithNote(this.getGraceNotes(), note); // Modifier function\n\n // Draw notes\n this.grace_notes.forEach(graceNote => {\n graceNote.setContext(this.context).draw();\n });\n\n // Draw beam\n this.beams.forEach(beam => {\n beam.setContext(this.context).draw();\n });\n\n if (this.show_slur) {\n // Create and draw slur\n const is_stavenote = (this.getNote().getCategory() === StaveNote.CATEGORY);\n const TieClass = (is_stavenote ? StaveTie : TabTie);\n\n this.slur = new TieClass({\n last_note: this.grace_notes[0],\n first_note: note,\n first_indices: [0],\n last_indices: [0],\n });\n\n this.slur.render_options.cp2 = 12;\n this.slur.render_options.y_shift = (is_stavenote ? 7 : 5) + this.render_options.slur_y_shift;\n this.slur.setContext(this.context).draw();\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// ## Description\n// This file implements the `Stroke` class which renders chord strokes\n// that can be arpeggiated, brushed, rasquedo, etc.\n\nimport { Vex } from './vex';\nimport { Modifier } from './modifier';\nimport { StaveNote } from './stavenote';\nimport { Glyph } from './glyph';\n\nexport class Stroke extends Modifier {\n static get CATEGORY() { return 'strokes'; }\n static get Type() {\n return {\n BRUSH_DOWN: 1,\n BRUSH_UP: 2,\n ROLL_DOWN: 3, // Arpeggiated chord\n ROLL_UP: 4, // Arpeggiated chord\n RASQUEDO_DOWN: 5,\n RASQUEDO_UP: 6,\n ARPEGGIO_DIRECTIONLESS: 7, // Arpeggiated chord without upwards or downwards arrow\n };\n }\n\n // Arrange strokes inside `ModifierContext`\n static format(strokes, state) {\n const left_shift = state.left_shift;\n const stroke_spacing = 0;\n\n if (!strokes || strokes.length === 0) return this;\n\n const strokeList = strokes.map((stroke) => {\n const note = stroke.getNote();\n if (note instanceof StaveNote) {\n const { line } = note.getKeyProps()[stroke.getIndex()];\n const shift = note.getLeftDisplacedHeadPx();\n return { line, shift, stroke };\n } else {\n const { str: string } = note.getPositions()[stroke.getIndex()];\n return { line: string, shift: 0, stroke };\n }\n });\n\n const strokeShift = left_shift;\n\n // There can only be one stroke .. if more than one, they overlay each other\n const xShift = strokeList.reduce((xShift, { stroke, shift }) => {\n stroke.setXShift(strokeShift + shift);\n return Math.max(stroke.getWidth() + stroke_spacing, xShift);\n }, 0);\n\n state.left_shift += xShift;\n return true;\n }\n\n constructor(type, options) {\n super();\n this.setAttribute('type', 'Stroke');\n\n this.note = null;\n this.options = Vex.Merge({}, options);\n\n // multi voice - span stroke across all voices if true\n this.all_voices = 'all_voices' in this.options ? this.options.all_voices : true;\n\n // multi voice - end note of stroke, set in draw()\n this.note_end = null;\n this.index = null;\n this.type = type;\n this.position = Modifier.Position.LEFT;\n\n this.render_options = {\n font_scale: 38,\n stroke_px: 3,\n stroke_spacing: 10,\n };\n\n this.font = {\n family: 'serif',\n size: 10,\n weight: 'bold italic',\n };\n\n this.setXShift(0);\n this.setWidth(10);\n }\n\n getCategory() { return Stroke.CATEGORY; }\n getPosition() { return this.position; }\n addEndNote(note) { this.note_end = note; return this; }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n if (!(this.note && (this.index != null))) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw stroke without a note and index.\");\n }\n\n const start = this.note.getModifierStartXY(this.position, this.index);\n let ys = this.note.getYs();\n let topY = start.y;\n let botY = start.y;\n const x = start.x - 5;\n const line_space = this.note.stave.options.spacing_between_lines_px;\n\n const notes = this.getModifierContext().getModifiers(this.note.getCategory());\n for (let i = 0; i < notes.length; i++) {\n ys = notes[i].getYs();\n for (let n = 0; n < ys.length; n++) {\n if (this.note === notes[i] || this.all_voices) {\n topY = Vex.Min(topY, ys[n]);\n botY = Vex.Max(botY, ys[n]);\n }\n }\n }\n\n let arrow;\n let arrow_shift_x;\n let arrow_y;\n let text_shift_x;\n let text_y;\n\n switch (this.type) {\n case Stroke.Type.BRUSH_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n arrow_y = topY - (line_space / 2) + 10;\n botY += (line_space / 2);\n break;\n case Stroke.Type.BRUSH_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = 0.5;\n arrow_y = botY + (line_space / 2);\n topY -= (line_space / 2);\n break;\n case Stroke.Type.ROLL_DOWN:\n case Stroke.Type.RASQUEDO_DOWN:\n arrow = 'arrowheadBlackUp';\n arrow_shift_x = -3;\n text_shift_x = this.x_shift + arrow_shift_x - 2;\n if (this.note instanceof StaveNote) {\n topY += 1.5 * line_space;\n if ((botY - topY) % 2 !== 0) {\n botY += 0.5 * line_space;\n } else {\n botY += line_space;\n }\n arrow_y = topY - line_space;\n text_y = botY + line_space + 2;\n } else {\n topY += 1.5 * line_space;\n botY += line_space;\n arrow_y = topY - 0.75 * line_space;\n text_y = botY + 0.25 * line_space;\n }\n break;\n case Stroke.Type.ROLL_UP:\n case Stroke.Type.RASQUEDO_UP:\n arrow = 'arrowheadBlackDown';\n arrow_shift_x = -4;\n text_shift_x = this.x_shift + arrow_shift_x - 1;\n if (this.note instanceof StaveNote) {\n arrow_y = line_space / 2;\n topY += 0.5 * line_space;\n if ((botY - topY) % 2 === 0) {\n botY += line_space / 2;\n }\n arrow_y = botY + 0.5 * line_space;\n text_y = topY - 1.25 * line_space;\n } else {\n topY += 0.25 * line_space;\n botY += 0.5 * line_space;\n arrow_y = botY + 0.25 * line_space;\n text_y = topY - line_space;\n }\n break;\n case Stroke.Type.ARPEGGIO_DIRECTIONLESS:\n topY += 0.5 * line_space;\n botY += line_space; // * 0.5 can lead to slight underlap instead of overlap sometimes\n break;\n default:\n throw new Vex.RERR('InvalidType', `The stroke type ${this.type} does not exist`);\n }\n\n let strokeLine = 'straight';\n // Draw the stroke\n if (this.type === Stroke.Type.BRUSH_DOWN || this.type === Stroke.Type.BRUSH_UP) {\n this.context.fillRect(x + this.x_shift, topY, 1, botY - topY);\n } else {\n strokeLine = 'wiggly';\n if (this.note instanceof StaveNote) {\n for (let i = topY; i <= botY; i += line_space) {\n Glyph.renderGlyph(\n this.context,\n x + this.x_shift - 4,\n i,\n this.render_options.font_scale,\n 'vexWiggleArpeggioUp'\n );\n }\n } else {\n let i;\n for (i = topY; i <= botY; i += 10) {\n Glyph.renderGlyph(\n this.context,\n x + this.x_shift - 4,\n i,\n this.render_options.font_scale,\n 'vexWiggleArpeggioUp'\n );\n }\n if (this.type === Stroke.Type.RASQUEDO_DOWN) {\n text_y = i + 0.25 * line_space;\n }\n }\n }\n\n if (this.type === Stroke.Type.ARPEGGIO_DIRECTIONLESS) {\n return; // skip drawing arrow heads or text\n }\n\n // Draw the arrow head\n Glyph.renderGlyph(\n this.context,\n x + this.x_shift + arrow_shift_x,\n arrow_y,\n this.render_options.font_scale,\n arrow,\n { category: `stroke.${arrow}.${strokeLine}` }\n );\n\n // Draw the rasquedo \"R\"\n if (this.type === Stroke.Type.RASQUEDO_DOWN || this.type === Stroke.Type.RASQUEDO_UP) {\n this.context.save();\n this.context.setFont(this.font.family, this.font.size, this.font.weight);\n this.context.fillText('R', x + text_shift_x, text_y);\n this.context.restore();\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns\n//\n// ## Description\n// This file implements the `StringNumber` class which renders string\n// number annotations beside notes.\n\nimport { Vex } from './vex';\nimport { Modifier } from './modifier';\nimport { Renderer } from './renderer';\nimport { StaveNote } from './stavenote';\n\nexport class StringNumber extends Modifier {\n static get CATEGORY() { return 'stringnumber'; }\n\n // ## Static Methods\n // Arrange string numbers inside a `ModifierContext`\n static format(nums, state) {\n const left_shift = state.left_shift;\n const right_shift = state.right_shift;\n const num_spacing = 1;\n\n if (!nums || nums.length === 0) return this;\n\n const nums_list = [];\n let prev_note = null;\n let shift_left = 0;\n let shift_right = 0;\n\n let i;\n let num;\n let note;\n let pos;\n for (i = 0; i < nums.length; ++i) {\n num = nums[i];\n note = num.getNote();\n\n for (i = 0; i < nums.length; ++i) {\n num = nums[i];\n note = num.getNote();\n pos = num.getPosition();\n const props = note.getKeyProps()[num.getIndex()];\n\n if (note !== prev_note) {\n for (let n = 0; n < note.keys.length; ++n) {\n if (left_shift === 0) {\n shift_left = Math.max(note.getLeftDisplacedHeadPx(), shift_left);\n }\n if (right_shift === 0) {\n shift_right = Math.max(note.getRightDisplacedHeadPx(), shift_right);\n }\n }\n prev_note = note;\n }\n\n nums_list.push({\n pos,\n note,\n num,\n line: props.line,\n shiftL: shift_left,\n shiftR: shift_right,\n });\n }\n }\n\n // Sort string numbers by line number.\n nums_list.sort((a, b) => b.line - a.line);\n\n // TODO: This variable never gets assigned to anything. Is that a bug or can this be removed?\n let num_shiftL = 0; // eslint-disable-line\n let num_shiftR = 0;\n let x_widthL = 0;\n let x_widthR = 0;\n let last_line = null;\n let last_note = null;\n for (i = 0; i < nums_list.length; ++i) {\n let num_shift = 0;\n note = nums_list[i].note;\n pos = nums_list[i].pos;\n num = nums_list[i].num;\n const line = nums_list[i].line;\n const shiftL = nums_list[i].shiftL;\n const shiftR = nums_list[i].shiftR;\n\n // Reset the position of the string number every line.\n if (line !== last_line || note !== last_note) {\n num_shiftL = left_shift + shiftL;\n num_shiftR = right_shift + shiftR;\n }\n\n const num_width = num.getWidth() + num_spacing;\n if (pos === Modifier.Position.LEFT) {\n num.setXShift(left_shift);\n num_shift = shift_left + num_width; // spacing\n x_widthL = (num_shift > x_widthL) ? num_shift : x_widthL;\n } else if (pos === Modifier.Position.RIGHT) {\n num.setXShift(num_shiftR);\n num_shift += num_width; // spacing\n x_widthR = (num_shift > x_widthR) ? num_shift : x_widthR;\n }\n last_line = line;\n last_note = note;\n }\n\n state.left_shift += x_widthL;\n state.right_shift += x_widthR;\n return true;\n }\n\n constructor(number) {\n super();\n this.setAttribute('type', 'StringNumber');\n\n this.note = null;\n this.last_note = null;\n this.index = null;\n this.string_number = number;\n this.setWidth(20); // ???\n this.position = Modifier.Position.ABOVE; // Default position above stem or note head\n this.x_shift = 0;\n this.y_shift = 0;\n this.x_offset = 0; // Horizontal offset from default\n this.y_offset = 0; // Vertical offset from default\n this.dashed = true; // true - draw dashed extension false - no extension\n this.leg = Renderer.LineEndType.NONE; // draw upward/downward leg at the of extension line\n this.radius = 8;\n this.font = {\n family: 'sans-serif',\n size: 10,\n weight: 'bold',\n };\n }\n getCategory() { return StringNumber.CATEGORY; }\n getNote() { return this.note; }\n setNote(note) { this.note = note; return this; }\n getIndex() { return this.index; }\n setIndex(index) { this.index = index; return this; }\n\n setLineEndType(leg) {\n if (leg >= Renderer.LineEndType.NONE && leg <= Renderer.LineEndType.DOWN) {\n this.leg = leg;\n }\n return this;\n }\n\n setStringNumber(number) { this.string_number = number; return this; }\n setOffsetX(x) { this.x_offset = x; return this; }\n setOffsetY(y) { this.y_offset = y; return this; }\n setLastNote(note) { this.last_note = note; return this; }\n setDashed(dashed) { this.dashed = dashed; return this; }\n\n draw() {\n const ctx = this.checkContext();\n if (!(this.note && (this.index != null))) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw string number without a note and index.\");\n }\n this.setRendered();\n\n const line_space = this.note.stave.options.spacing_between_lines_px;\n\n const start = this.note.getModifierStartXY(this.position, this.index);\n let dot_x = (start.x + this.x_shift + this.x_offset);\n let dot_y = start.y + this.y_shift + this.y_offset;\n\n switch (this.position) {\n case Modifier.Position.ABOVE:\n case Modifier.Position.BELOW: {\n const stem_ext = this.note.getStemExtents();\n let top = stem_ext.topY;\n let bottom = stem_ext.baseY + 2;\n\n if (this.note.stem_direction === StaveNote.STEM_DOWN) {\n top = stem_ext.baseY;\n bottom = stem_ext.topY - 2;\n }\n\n if (this.position === Modifier.Position.ABOVE) {\n dot_y = this.note.hasStem()\n ? top - (line_space * 1.75)\n : start.y - (line_space * 1.75);\n } else {\n dot_y = this.note.hasStem()\n ? bottom + (line_space * 1.5)\n : start.y + (line_space * 1.75);\n }\n\n dot_y += this.y_shift + this.y_offset;\n\n break;\n } case Modifier.Position.LEFT:\n dot_x -= (this.radius / 2) + 5;\n break;\n case Modifier.Position.RIGHT:\n dot_x += (this.radius / 2) + 6;\n break;\n default:\n throw new Vex.RERR(\n 'InvalidPosition', `The position ${this.position} is invalid`\n );\n }\n\n ctx.save();\n ctx.beginPath();\n ctx.arc(dot_x, dot_y, this.radius, 0, Math.PI * 2, false);\n ctx.lineWidth = 1.5;\n ctx.stroke();\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n const x = dot_x - ctx.measureText(this.string_number).width / 2;\n ctx.fillText('' + this.string_number, x, dot_y + 4.5);\n\n if (this.last_note != null) {\n const end = this.last_note.getStemX() - this.note.getX() + 5;\n ctx.strokeStyle = '#000000';\n ctx.lineCap = 'round';\n ctx.lineWidth = 0.6;\n if (this.dashed) {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 3]);\n } else {\n Renderer.drawDashedLine(ctx, dot_x + 10, dot_y, dot_x + end, dot_y, [3, 0]);\n }\n\n let len;\n let pattern;\n switch (this.leg) {\n case Renderer.LineEndType.UP:\n len = -10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n case Renderer.LineEndType.DOWN:\n len = 10;\n pattern = this.dashed ? [3, 3] : [3, 0];\n Renderer.drawDashedLine(ctx, dot_x + end, dot_y, dot_x + end, dot_y + len, pattern);\n break;\n default:\n break;\n }\n }\n\n ctx.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Larry Kuhns.\n//\n// ## Description\n//\n// This file implements articulations and accents as modifiers that can be\n// attached to notes. The complete list of articulations is available in\n// `tables.js` under `Vex.Flow.articulationCodes`.\n//\n// See `tests/articulation_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\nimport { Glyph } from './glyph';\nimport { Stem } from './stem';\n\n// To enable logging for this class. Set `Vex.Flow.Articulation.DEBUG` to `true`.\nfunction L(...args) { if (Articulation.DEBUG) Vex.L('Vex.Flow.Articulation', args); }\n\nconst { ABOVE, BELOW } = Modifier.Position;\n\nconst roundToNearestHalf = (mathFn, value) => mathFn(value / 0.5) * 0.5;\n\n// This includes both staff and ledger lines\nconst isWithinLines = (line, position) => position === ABOVE ? line <= 5 : line >= 1;\n\nconst getRoundingFunction = (line, position) => {\n if (isWithinLines(line, position)) {\n if (position === ABOVE) {\n return Math.ceil;\n } else {\n return Math.floor;\n }\n } else {\n return Math.round;\n }\n};\n\nconst snapLineToStaff = (canSitBetweenLines, line, position, offsetDirection) => {\n // Initially, snap to nearest staff line or space\n const snappedLine = roundToNearestHalf(getRoundingFunction(line, position), line);\n const canSnapToStaffSpace = canSitBetweenLines && isWithinLines(snappedLine, position);\n const onStaffLine = snappedLine % 1 === 0;\n\n if (canSnapToStaffSpace && onStaffLine) {\n const HALF_STAFF_SPACE = 0.5;\n return snappedLine + (HALF_STAFF_SPACE * -offsetDirection);\n } else {\n return snappedLine;\n }\n};\n\nconst isStaveNote = (note) => {\n const noteCategory = note.getCategory();\n return noteCategory === 'stavenotes' || noteCategory === 'gracenotes';\n};\n\nconst getTopY = (note, textLine) => {\n const stave = note.getStave();\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n\n if (isStaveNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n } else {\n return stemBaseY;\n }\n } else {\n return Math.min(...note.getYs());\n }\n } else if (note.getCategory() === 'tabnotes') {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemTipY;\n } else {\n return stave.getYForTopText(textLine);\n }\n } else {\n return stave.getYForTopText(textLine);\n }\n } else {\n throw new Vex.RERR(\n 'UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'\n );\n }\n};\n\nconst getBottomY = (note, textLine) => {\n const stave = note.getStave();\n const stemDirection = note.getStemDirection();\n const { topY: stemTipY, baseY: stemBaseY } = note.getStemExtents();\n\n if (isStaveNote(note)) {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stemBaseY;\n } else {\n return stemTipY;\n }\n } else {\n return Math.max(...note.getYs());\n }\n } else if (note.getCategory() === 'tabnotes') {\n if (note.hasStem()) {\n if (stemDirection === Stem.UP) {\n return stave.getYForBottomText(textLine);\n } else {\n return stemTipY;\n }\n } else {\n return stave.getYForBottomText(textLine);\n }\n } else {\n throw new Vex.RERR(\n 'UnknownCategory', 'Only can get the top and bottom ys of stavenotes and tabnotes'\n );\n }\n};\n\n// Gets the initial offset of the articulation from the y value of the starting position.\n// This is required because the top/bottom text positions already have spacing applied to\n// provide a \"visually pleasent\" default position. However the y values provided from\n// the stavenote's top/bottom do *not* have any pre-applied spacing. This function\n// normalizes this asymmetry.\nconst getInitialOffset = (note, position) => {\n const isOnStemTip = (\n (position === ABOVE && note.getStemDirection() === Stem.UP) ||\n (position === BELOW && note.getStemDirection() === Stem.DOWN)\n );\n\n if (isStaveNote(note)) {\n if (note.hasStem() && isOnStemTip) {\n return 0.5;\n } else {\n // this amount is larger than the stem-tip offset because we start from\n // the center of the notehead\n return 1;\n }\n } else {\n if (note.hasStem() && isOnStemTip) {\n return 1;\n } else {\n return 0;\n }\n }\n};\n\nexport class Articulation extends Modifier {\n static get CATEGORY() { return 'articulations'; }\n static get INITIAL_OFFSET() { return -0.5; }\n\n // FIXME:\n // Most of the complex formatting logic (ie: snapping to space) is\n // actually done in .render(). But that logic belongs in this method.\n //\n // Unfortunately, this isn't possible because, by this point, stem lengths\n // have not yet been finalized. Finalized stem lengths are required to determine the\n // initial position of any stem-side articulation.\n //\n // This indicates that all objects should have their stave set before being\n // formatted. It can't be an optional if you want accurate vertical positioning.\n // Consistently positioned articulations that play nice with other modifiers\n // won't be possible until we stop relying on render-time formatting.\n //\n // Ideally, when this function has completed, the vertical articulation positions\n // should be ready to render without further adjustment. But the current state\n // is far from this ideal.\n static format(articulations, state) {\n if (!articulations || articulations.length === 0) return false;\n\n const isAbove = artic => artic.getPosition() === ABOVE;\n const isBelow = artic => artic.getPosition() === BELOW;\n const margin = 0.5;\n const getIncrement = (articulation, line, position) =>\n roundToNearestHalf(\n getRoundingFunction(line, position),\n (articulation.glyph.getMetrics().height / 10) + margin\n );\n\n articulations\n .filter(isAbove)\n .forEach(articulation => {\n articulation.setTextLine(state.top_text_line);\n state.top_text_line += getIncrement(articulation, state.top_text_line, ABOVE);\n });\n\n articulations\n .filter(isBelow)\n .forEach(articulation => {\n articulation.setTextLine(state.text_line);\n state.text_line += getIncrement(articulation, state.text_line, BELOW);\n });\n\n const width = articulations\n .map(articulation => articulation.getWidth())\n .reduce((maxWidth, articWidth) => Math.max(articWidth, maxWidth));\n\n state.left_shift += width / 2;\n state.right_shift += width / 2;\n return true;\n }\n\n static easyScoreHook({ articulations }, note, builder) {\n if (!articulations) return;\n\n const articNameToCode = {\n staccato: 'a.',\n tenuto: 'a-',\n };\n\n articulations\n .split(',')\n .map(articString => articString.trim().split('.'))\n .map(([name, position]) => {\n const artic = { type: articNameToCode[name] };\n if (position) artic.position = Modifier.PositionString[position];\n return builder.getFactory().Articulation(artic);\n })\n .map(artic => note.addModifier(0, artic));\n }\n\n // Create a new articulation of type `type`, which is an entry in\n // `Vex.Flow.articulationCodes` in `tables.js`.\n constructor(type) {\n super();\n this.setAttribute('type', 'Articulation');\n\n this.note = null;\n this.index = null;\n this.type = type;\n this.position = BELOW;\n this.render_options = {\n font_scale: 38,\n };\n\n this.reset();\n }\n\n reset() {\n this.articulation = Flow.articulationCodes(this.type);\n if (!this.articulation) {\n throw new Vex.RERR('ArgumentError', `Articulation not found: ${this.type}`);\n }\n\n const code = (this.position === ABOVE ? this.articulation.aboveCode : this.articulation.belowCode) || this.articulation.code;\n this.glyph = new Glyph(code, this.render_options.font_scale);\n\n this.setWidth(this.glyph.getMetrics().width);\n }\n\n getCategory() { return Articulation.CATEGORY; }\n\n // Render articulation in position next to note.\n draw() {\n const {\n note, index, position, glyph,\n articulation: { between_lines: canSitBetweenLines },\n text_line: textLine,\n context: ctx,\n } = this;\n\n this.checkContext();\n\n if (!note || index == null) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw Articulation without a note and index.\");\n }\n\n this.setRendered();\n\n const stave = note.getStave();\n const staffSpace = stave.getSpacingBetweenLines();\n const isTab = note.getCategory() === 'tabnotes';\n\n // Articulations are centered over/under the note head.\n const { x } = note.getModifierStartXY(position, index);\n const shouldSitOutsideStaff = !canSitBetweenLines || isTab;\n\n const initialOffset = getInitialOffset(note, position);\n\n const padding = this.musicFont.lookupMetric(`articulation.${glyph.getCode()}.padding`, 0);\n\n let y = {\n [ABOVE]: () => {\n glyph.setOrigin(0.5, 1);\n const y = getTopY(note, textLine) - ((textLine + initialOffset) * staffSpace);\n return shouldSitOutsideStaff\n ? Math.min(stave.getYForTopText(Articulation.INITIAL_OFFSET), y)\n : y;\n },\n [BELOW]: () => {\n glyph.setOrigin(0.5, 0);\n const y = getBottomY(note, textLine) + ((textLine + initialOffset) * staffSpace);\n return shouldSitOutsideStaff\n ? Math.max(stave.getYForBottomText(Articulation.INITIAL_OFFSET), y)\n : y;\n },\n }[position]();\n\n if (!isTab) {\n const offsetDirection = position === ABOVE ? -1 : +1;\n const noteLine = isTab ? note.positions[index].str : note.getKeyProps()[index].line;\n const distanceFromNote = (note.getYs()[index] - y) / staffSpace;\n const articLine = distanceFromNote + noteLine;\n const snappedLine = snapLineToStaff(canSitBetweenLines, articLine, position, offsetDirection);\n\n if (isWithinLines(snappedLine, position)) glyph.setOrigin(0.5, 0.5);\n\n y += Math.abs(snappedLine - articLine) * staffSpace * offsetDirection + (padding * offsetDirection);\n }\n\n L(`Rendering articulation at (x: ${x}, y: ${y})`);\n\n glyph.render(ctx, x, y);\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A formatter for abstract tickable objects, such as notes, chords,\n// tabs, etc.\n\nimport { Vex } from './vex';\nimport { Tickable } from './tickable';\nimport { Fraction } from './fraction';\n\nexport class TickContext extends Tickable {\n static getNextContext(tContext) {\n const contexts = tContext.tContexts;\n const index = contexts.indexOf(tContext);\n\n return contexts[index + 1];\n }\n\n constructor(options) {\n super();\n this.tickID = options && options.tickID;\n this.setAttribute('type', 'TickContext');\n this.currentTick = new Fraction(0, 1);\n\n this.maxTicks = new Fraction(0, 1);\n this.maxTickable = null; // Biggest tickable\n this.minTicks = null; // this can remian null if all tickables have ignore_ticks\n this.minTickable = null;\n\n this.padding = 1; // padding on each side (width += padding * 2)\n this.x = 0;\n this.xBase = 0; // base x position without xOffset\n this.xOffset = 0; // xBase and xOffset are an alternative way to describe x (x = xB + xO)\n this.tickables = []; // Notes, tabs, chords, lyrics.\n this.tickablesByVoice = {}; // Tickables indeced by voice number\n\n // Formatting metrics\n this.notePx = 0; // width of widest note in this context\n this.glyphPx = 0; // width of glyph (note head)\n this.leftDisplacedHeadPx = 0; // Extra left pixels for displaced notes\n this.rightDisplacedHeadPx = 0; // Extra right pixels for displaced notes\n this.modLeftPx = 0; // Left modifier pixels\n this.modRightPx = 0; // Right modifier pixels\n this.totalLeftPx = 0; // Total left pixels\n this.totalRightPx = 0; // Total right pixels\n this.tContexts = []; // Parent array of tick contexts\n }\n\n getTickID() { return this.tickID; }\n getX() { return this.x; }\n setX(x) { this.x = x; this.xBase = x; this.xOffset = 0; return this; }\n getXBase() { return this.xBase; } // use of xBase and xOffset is optional, avoids offset creep\n setXBase(xBase) { this.xBase = xBase; this.x = xBase + this.xOffset; }\n getXOffset() { return this.xOffset; }\n setXOffset(xOffset) { this.xOffset = xOffset; this.x = this.xBase + xOffset; }\n getWidth() { return this.width + (this.padding * 2); }\n setPadding(padding) { this.padding = padding; return this; }\n getMaxTicks() { return this.maxTicks; }\n getMinTicks() { return this.minTicks; }\n getMaxTickable() { return this.maxTickable; }\n getMinTickable() { return this.minTickable; }\n getTickables() { return this.tickables; }\n getTickablesForVoice(voiceIndex) { return this.tickablesByVoice[voiceIndex]; }\n getTickablesByVoice() { return this.tickablesByVoice; }\n\n getCenterAlignedTickables() {\n return this.tickables.filter(tickable => tickable.isCenterAligned());\n }\n\n // Get widths context, note and left/right modifiers for formatting\n getMetrics() {\n const { width, glyphPx, notePx, leftDisplacedHeadPx, rightDisplacedHeadPx, modLeftPx, modRightPx, totalLeftPx, totalRightPx } = this;\n return {\n width, // Width of largest tickable in context\n glyphPx, // Width of largest glyph (note head)\n notePx, // Width of notehead + stem\n leftDisplacedHeadPx, // Left modifiers\n rightDisplacedHeadPx, // Right modifiers\n modLeftPx,\n modRightPx,\n totalLeftPx,\n totalRightPx\n };\n }\n\n getCurrentTick() { return this.currentTick; }\n setCurrentTick(tick) {\n this.currentTick = tick;\n this.preFormatted = false;\n }\n\n addTickable(tickable, voiceIndex) {\n if (!tickable) {\n throw new Vex.RERR('BadArgument', 'Invalid tickable added.');\n }\n\n if (!tickable.shouldIgnoreTicks()) {\n this.ignore_ticks = false;\n\n const ticks = tickable.getTicks();\n\n if (ticks.greaterThan(this.maxTicks)) {\n this.maxTicks = ticks.clone();\n this.maxTickable = tickable;\n }\n\n if (this.minTicks == null) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n } else if (ticks.lessThan(this.minTicks)) {\n this.minTicks = ticks.clone();\n this.minTickable = tickable;\n }\n }\n\n tickable.setTickContext(this);\n this.tickables.push(tickable);\n this.tickablesByVoice[voiceIndex] = tickable;\n this.preFormatted = false;\n return this;\n }\n\n preFormat() {\n if (this.preFormatted) return this;\n\n for (let i = 0; i < this.tickables.length; ++i) {\n const tickable = this.tickables[i];\n tickable.preFormat();\n const metrics = tickable.getMetrics();\n\n // Maintain max displaced head pixels from all tickables in the context\n this.leftDisplacedHeadPx = Math.max(this.leftDisplacedHeadPx, metrics.leftDisplacedHeadPx);\n this.rightDisplacedHeadPx = Math.max(this.rightDisplacedHeadPx, metrics.rightDisplacedHeadPx);\n\n // Maintain the widest note for all tickables in the context\n this.notePx = Math.max(this.notePx, metrics.notePx);\n\n // Maintain the widest note head\n this.glyphPx = Math.max(this.glyphPx, metrics.glyphWidth);\n\n // Total modifier shift\n this.modLeftPx = Math.max(this.modLeftPx, metrics.modLeftPx);\n this.modRightPx = Math.max(this.modRightPx, metrics.modRightPx);\n\n // Total shift\n this.totalLeftPx = Math.max(this.totalLeftPx, metrics.modLeftPx + metrics.leftDisplacedHeadPx);\n this.totalRightPx = Math.max(this.totalRightPx, metrics.modRightPx + metrics.rightDisplacedHeadPx);\n\n // Recalculate the tick context total width\n this.width = this.notePx + this.totalLeftPx + this.totalRightPx;\n }\n\n return this;\n }\n\n postFormat() {\n if (this.postFormatted) return this;\n this.postFormatted = true;\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements ornaments as modifiers that can be\n// attached to notes. The complete list of ornaments is available in\n// `tables.js` under `Vex.Flow.ornamentCodes`.\n//\n// See `tests/ornament_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\nimport { TickContext } from './tickcontext';\nimport { StaveNote } from './stavenote';\nimport { Glyph } from './glyph';\n\n// To enable logging for this class. Set `Vex.Flow.Ornament.DEBUG` to `true`.\nfunction L(...args) { if (Ornament.DEBUG) Vex.L('Vex.Flow.Ornament', args); }\n\nexport class Ornament extends Modifier {\n static get CATEGORY() { return 'ornaments'; }\n\n // ## Static Methods\n // Arrange ornaments inside `ModifierContext`\n static format(ornaments, state) {\n if (!ornaments || ornaments.length === 0) return false;\n\n let width = 0;\n for (let i = 0; i < ornaments.length; ++i) {\n const ornament = ornaments[i];\n const increment = 2;\n\n width = Math.max(ornament.getWidth(), width);\n\n if (ornament.getPosition() === Modifier.Position.ABOVE) {\n ornament.setTextLine(state.top_text_line);\n state.top_text_line += increment;\n } else {\n ornament.setTextLine(state.text_line);\n state.text_line += increment;\n }\n }\n\n state.left_shift += width / 2;\n state.right_shift += width / 2;\n return true;\n }\n\n // Create a new ornament of type `type`, which is an entry in\n // `Vex.Flow.ornamentCodes` in `tables.js`.\n constructor(type) {\n super();\n this.setAttribute('type', 'Ornament');\n\n this.note = null;\n this.index = null;\n this.type = type;\n this.position = Modifier.Position.ABOVE;\n this.delayed = false;\n\n this.accidentalUpper = null;\n this.accidentalLower = null;\n\n this.render_options = {\n font_scale: 38,\n accidentalLowerPadding: 3,\n accidentalUpperPadding: 3,\n };\n\n this.ornament = Flow.ornamentCodes(this.type);\n if (!this.ornament) {\n throw new Vex.RERR('ArgumentError', `Ornament not found: '${this.type}'`);\n }\n\n this.glyph = new Glyph(this.ornament.code, this.render_options.font_scale, { category: `ornament.${this.ornament.code}` });\n this.glyph.setOrigin(0.5, 1.0); // FIXME: SMuFL won't require a vertical origin shift\n }\n\n getCategory() { return Ornament.CATEGORY; }\n\n // Set whether the ornament is to be delayed\n setDelayed(delayed) { this.delayed = delayed; return this; }\n\n // Set the upper accidental for the ornament\n setUpperAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalUpper = new Glyph(Flow.accidentalCodes(accid).code, scale);\n this.accidentalUpper.setOrigin(0.5, 1.0);\n return this;\n }\n\n // Set the lower accidental for the ornament\n setLowerAccidental(accid) {\n const scale = this.render_options.font_scale / 1.3;\n this.accidentalLower = new Glyph(Flow.accidentalCodes(accid).code, scale);\n this.accidentalLower.setOrigin(0.5, 1.0);\n return this;\n }\n\n // Render ornament in position next to note.\n draw() {\n this.checkContext();\n\n if (!this.note || this.index == null) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw Ornament without a note and index.\");\n }\n\n this.setRendered();\n\n const ctx = this.context;\n const stemDir = this.note.getStemDirection();\n const stave = this.note.getStave();\n\n // Get stem extents\n const stemExtents = this.note.getStem().getExtents();\n let y = stemDir === StaveNote.STEM_DOWN ? stemExtents.baseY : stemExtents.topY;\n\n // TabNotes don't have stems attached to them. Tab stems are rendered\n // outside the stave.\n if (this.note.getCategory() === 'tabnotes') {\n if (this.note.hasStem()) {\n if (stemDir === StaveNote.STEM_DOWN) {\n y = stave.getYForTopText(this.text_line);\n }\n } else { // Without a stem\n y = stave.getYForTopText(this.text_line);\n }\n }\n\n const isPlacedOnNoteheadSide = stemDir === StaveNote.STEM_DOWN;\n const spacing = stave.getSpacingBetweenLines();\n let lineSpacing = 1;\n\n // Beamed stems are longer than quarter note stems, adjust accordingly\n if (!isPlacedOnNoteheadSide && this.note.beam) {\n lineSpacing += 0.5;\n }\n\n const totalSpacing = spacing * (this.text_line + lineSpacing);\n const glyphYBetweenLines = y - totalSpacing;\n\n // Get initial coordinates for the modifier position\n const start = this.note.getModifierStartXY(this.position, this.index);\n let glyphX = start.x;\n let glyphY = Math.min(stave.getYForTopText(this.text_line), glyphYBetweenLines);\n glyphY += this.y_shift;\n\n // Ajdust x position if ornament is delayed\n if (this.delayed) {\n let delayXShift = 0;\n if (this.delayXShift !== undefined) {\n delayXShift = this.delayXShift;\n } else {\n delayXShift += this.glyph.getMetrics().width / 2;\n const nextContext = TickContext.getNextContext(this.note.getTickContext());\n if (nextContext) {\n delayXShift += (nextContext.getX() - glyphX) * 0.5;\n } else {\n delayXShift += (stave.x + stave.width - glyphX) * 0.5;\n }\n this.delayXShift = delayXShift;\n }\n glyphX += delayXShift;\n }\n\n L('Rendering ornament: ', this.ornament, glyphX, glyphY);\n\n if (this.accidentalLower) {\n this.accidentalLower.render(ctx, glyphX, glyphY);\n glyphY -= this.accidentalLower.getMetrics().height;\n glyphY -= this.render_options.accidentalLowerPadding;\n }\n\n this.glyph.render(ctx, glyphX, glyphY);\n glyphY -= this.glyph.getMetrics().height;\n\n if (this.accidentalUpper) {\n glyphY -= this.render_options.accidentalUpperPadding;\n this.accidentalUpper.render(ctx, glyphX, glyphY);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements text annotations as modifiers that can be attached to\n// notes.\n//\n// See `tests/annotation_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\n\n// To enable logging for this class. Set `Vex.Flow.Annotation.DEBUG` to `true`.\nfunction L(...args) { if (Annotation.DEBUG) Vex.L('Vex.Flow.Annotation', args); }\n\nexport class Annotation extends Modifier {\n static get CATEGORY() { return 'annotations'; }\n\n // Text annotations can be positioned and justified relative to the note.\n static get Justify() {\n return {\n LEFT: 1,\n CENTER: 2,\n RIGHT: 3,\n CENTER_STEM: 4,\n };\n }\n\n static get JustifyString() {\n return {\n left: Annotation.Justify.LEFT,\n right: Annotation.Justify.RIGHT,\n center: Annotation.Justify.CENTER,\n centerStem: Annotation.Justify.CENTER_STEM,\n };\n }\n\n static get VerticalJustify() {\n return {\n TOP: 1,\n CENTER: 2,\n BOTTOM: 3,\n CENTER_STEM: 4,\n };\n }\n\n static get VerticalJustifyString() {\n return {\n above: Annotation.VerticalJustify.TOP,\n top: Annotation.VerticalJustify.TOP,\n below: Annotation.VerticalJustify.BOTTOM,\n bottom: Annotation.VerticalJustify.BOTTOM,\n center: Annotation.VerticalJustify.CENTER,\n centerStem: Annotation.VerticalJustify.CENTER_STEM,\n };\n }\n\n // Arrange annotations within a `ModifierContext`\n static format(annotations, state) {\n if (!annotations || annotations.length === 0) return false;\n\n let width = 0;\n for (let i = 0; i < annotations.length; ++i) {\n const annotation = annotations[i];\n width = Math.max(annotation.getWidth(), width);\n if (annotation.getPosition() === Modifier.Position.ABOVE) {\n annotation.setTextLine(state.top_text_line);\n state.top_text_line++;\n } else {\n annotation.setTextLine(state.text_line);\n state.text_line++;\n }\n }\n\n state.left_shift += width / 2;\n state.right_shift += width / 2;\n return true;\n }\n\n // ## Prototype Methods\n //\n // Annotations inherit from `Modifier` and is positioned correctly when\n // in a `ModifierContext`.\n // Create a new `Annotation` with the string `text`.\n constructor(text) {\n super();\n this.setAttribute('type', 'Annotation');\n\n this.note = null;\n this.index = null;\n this.text = text;\n this.justification = Annotation.Justify.CENTER;\n this.vert_justification = Annotation.VerticalJustify.TOP;\n this.font = {\n family: 'Arial',\n size: 10,\n weight: '',\n };\n\n // The default width is calculated from the text.\n this.setWidth(Flow.textWidth(text));\n }\n\n getCategory() { return Annotation.CATEGORY; }\n\n // Set font family, size, and weight. E.g., `Arial`, `10pt`, `Bold`.\n setFont(family, size, weight) {\n this.font = { family, size, weight };\n return this;\n }\n\n // Set vertical position of text (above or below stave). `just` must be\n // a value in `Annotation.VerticalJustify`.\n setVerticalJustification(just) {\n this.vert_justification = typeof (just) === 'string'\n ? Annotation.VerticalJustifyString[just]\n : just;\n return this;\n }\n\n // Get and set horizontal justification. `justification` is a value in\n // `Annotation.Justify`.\n getJustification() { return this.justification; }\n setJustification(just) {\n this.justification = typeof (just) === 'string'\n ? Annotation.JustifyString[just]\n : just;\n return this;\n }\n\n // Render text beside the note.\n draw() {\n this.checkContext();\n\n if (!this.note) {\n throw new Vex.RERR(\n 'NoNoteForAnnotation', \"Can't draw text annotation without an attached note.\"\n );\n }\n\n this.setRendered();\n const start = this.note.getModifierStartXY(Modifier.Position.ABOVE,\n this.index);\n\n // We're changing context parameters. Save current state.\n this.context.save();\n this.context.setFont(this.font.family, this.font.size, this.font.weight);\n const text_width = this.context.measureText(this.text).width;\n\n // Estimate text height to be the same as the width of an 'm'.\n //\n // This is a hack to work around the inability to measure text height\n // in HTML5 Canvas (and SVG).\n const text_height = this.context.measureText('m').width;\n let x;\n let y;\n\n if (this.justification === Annotation.Justify.LEFT) {\n x = start.x;\n } else if (this.justification === Annotation.Justify.RIGHT) {\n x = start.x - text_width;\n } else if (this.justification === Annotation.Justify.CENTER) {\n x = start.x - text_width / 2;\n } else /* CENTER_STEM */ {\n x = this.note.getStemX() - text_width / 2;\n }\n\n let stem_ext;\n let spacing;\n const has_stem = this.note.hasStem();\n const stave = this.note.getStave();\n\n // The position of the text varies based on whether or not the note\n // has a stem.\n if (has_stem) {\n stem_ext = this.note.getStem().getExtents();\n spacing = stave.getSpacingBetweenLines();\n }\n\n if (this.vert_justification === Annotation.VerticalJustify.BOTTOM) {\n // HACK: We need to compensate for the text's height since its origin\n // is bottom-right.\n y = stave.getYForBottomText(this.text_line + Flow.TEXT_HEIGHT_OFFSET_HACK);\n if (has_stem) {\n const stem_base = (this.note.getStemDirection() === 1 ? stem_ext.baseY : stem_ext.topY);\n y = Math.max(y, stem_base + (spacing * (this.text_line + 2)));\n }\n } else if (this.vert_justification === Annotation.VerticalJustify.CENTER) {\n const yt = this.note.getYForTopText(this.text_line) - 1;\n const yb = stave.getYForBottomText(this.text_line);\n y = yt + (yb - yt) / 2 + text_height / 2;\n } else if (this.vert_justification === Annotation.VerticalJustify.TOP) {\n y = Math.min(stave.getYForTopText(this.text_line), this.note.getYs()[0] - 10);\n if (has_stem) {\n y = Math.min(y, (stem_ext.topY - 5) - (spacing * this.text_line));\n }\n } else /* CENTER_STEM */ {\n const extents = this.note.getStemExtents();\n y = extents.topY + (extents.baseY - extents.topY) / 2 +\n text_height / 2;\n }\n\n L('Rendering annotation: ', this.text, x, y);\n this.context.fillText(this.text, x, y);\n this.context.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements tablature bends.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\n/**\n @param text Text for bend (\"Full\", \"Half\", etc.) (DEPRECATED)\n @param release If true, render a release. (DEPRECATED)\n @param phrase If set, ignore \"text\" and \"release\", and use the more\n sophisticated phrase specified.\n\n Example of a phrase:\n\n [{\n type: UP,\n text: \"whole\"\n width: 8;\n },\n {\n type: DOWN,\n text: \"whole\"\n width: 8;\n },\n {\n type: UP,\n text: \"half\"\n width: 8;\n },\n {\n type: UP,\n text: \"whole\"\n width: 8;\n },\n {\n type: DOWN,\n text: \"1 1/2\"\n width: 8;\n }]\n */\nexport class Bend extends Modifier {\n static get CATEGORY() { return 'bends'; }\n\n static get UP() {\n return 0;\n }\n static get DOWN() {\n return 1;\n }\n\n // ## Static Methods\n // Arrange bends in `ModifierContext`\n static format(bends, state) {\n if (!bends || bends.length === 0) return false;\n\n let last_width = 0;\n // Bends are always on top.\n const text_line = state.top_text_line;\n\n // Format Bends\n for (let i = 0; i < bends.length; ++i) {\n const bend = bends[i];\n bend.setXShift(last_width);\n last_width = bend.getWidth();\n bend.setTextLine(text_line);\n }\n\n state.right_shift += last_width;\n state.top_text_line += 1;\n return true;\n }\n\n // ## Prototype Methods\n constructor(text, release, phrase) {\n super();\n this.setAttribute('type', 'Bend');\n\n this.text = text;\n this.x_shift = 0;\n this.release = release || false;\n this.font = '10pt Arial';\n this.render_options = {\n line_width: 1.5,\n line_style: '#777777',\n bend_width: 8,\n release_width: 8,\n };\n\n if (phrase) {\n this.phrase = phrase;\n } else {\n // Backward compatibility\n this.phrase = [{ type: Bend.UP, text: this.text }];\n if (this.release) this.phrase.push({ type: Bend.DOWN, text: '' });\n }\n\n this.updateWidth();\n }\n\n getCategory() { return Bend.CATEGORY; }\n\n setXShift(value) {\n this.x_shift = value;\n this.updateWidth();\n }\n setFont(font) { this.font = font; return this; }\n getText() { return this.text; }\n updateWidth() {\n const that = this;\n\n function measure_text(text) {\n let text_width;\n if (that.context) {\n text_width = that.context.measureText(text).width;\n } else {\n text_width = Flow.textWidth(text);\n }\n\n return text_width;\n }\n\n let total_width = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if ('width' in bend) {\n total_width += bend.width;\n } else {\n const additional_width = (bend.type === Bend.UP) ?\n this.render_options.bend_width : this.render_options.release_width;\n\n bend.width = Vex.Max(additional_width, measure_text(bend.text)) + 3;\n bend.draw_width = bend.width / 2;\n total_width += bend.width;\n }\n }\n\n this.setWidth(total_width + this.x_shift);\n return this;\n }\n draw() {\n this.checkContext();\n if (!(this.note && (this.index != null))) {\n throw new Vex.RERR('NoNoteForBend', \"Can't draw bend without a note or index.\");\n }\n\n this.setRendered();\n\n const start = this.note.getModifierStartXY(Modifier.Position.RIGHT,\n this.index);\n start.x += 3;\n start.y += 0.5;\n const x_shift = this.x_shift;\n\n const ctx = this.context;\n const bend_height = this.note.getStave().getYForTopText(this.text_line) + 3;\n const annotation_y = this.note.getStave().getYForTopText(this.text_line) - 1;\n const that = this;\n\n function renderBend(x, y, width, height) {\n const cp_x = x + width;\n const cp_y = y;\n\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(that.render_options.line_width);\n ctx.setStrokeStyle(that.render_options.line_style);\n ctx.setFillStyle(that.render_options.line_style);\n ctx.moveTo(x, y);\n ctx.quadraticCurveTo(cp_x, cp_y, x + width, height);\n ctx.stroke();\n ctx.restore();\n }\n\n function renderRelease(x, y, width, height) {\n ctx.save();\n ctx.beginPath();\n ctx.setLineWidth(that.render_options.line_width);\n ctx.setStrokeStyle(that.render_options.line_style);\n ctx.setFillStyle(that.render_options.line_style);\n ctx.moveTo(x, height);\n ctx.quadraticCurveTo(\n x + width, height,\n x + width, y);\n ctx.stroke();\n ctx.restore();\n }\n\n function renderArrowHead(x, y, direction) {\n const width = 4;\n const dir = direction || 1;\n\n ctx.beginPath();\n ctx.moveTo(x, y);\n ctx.lineTo(x - width, y + width * dir);\n ctx.lineTo(x + width, y + width * dir);\n ctx.closePath();\n ctx.fill();\n }\n\n function renderText(x, text) {\n ctx.save();\n ctx.setRawFont(that.font);\n const render_x = x - (ctx.measureText(text).width / 2);\n ctx.fillText(text, render_x, annotation_y);\n ctx.restore();\n }\n\n let last_bend = null;\n let last_drawn_width = 0;\n for (let i = 0; i < this.phrase.length; ++i) {\n const bend = this.phrase[i];\n if (i === 0) bend.draw_width += x_shift;\n\n last_drawn_width = bend.draw_width +\n (last_bend ? last_bend.draw_width : 0) -\n (i === 1 ? x_shift : 0);\n if (bend.type === Bend.UP) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderArrowHead(start.x, bend_height);\n }\n\n renderBend(start.x, start.y, last_drawn_width, bend_height);\n }\n\n if (bend.type === Bend.DOWN) {\n if (last_bend && last_bend.type === Bend.UP) {\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n\n if (last_bend && last_bend.type === Bend.DOWN) {\n renderArrowHead(start.x, start.y, -1);\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n\n if (last_bend === null) {\n last_drawn_width = bend.draw_width;\n renderRelease(start.x, start.y, last_drawn_width, bend_height);\n }\n }\n\n renderText(start.x + last_drawn_width, bend.text);\n last_bend = bend;\n last_bend.x = start.x;\n\n start.x += last_drawn_width;\n }\n\n // Final arrowhead and text\n if (last_bend.type === Bend.UP) {\n renderArrowHead(last_bend.x + last_drawn_width, bend_height);\n } else if (last_bend.type === Bend.DOWN) {\n renderArrowHead(last_bend.x + last_drawn_width, start.y, -1);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements vibratos.\n\nimport { Vex } from './vex';\nimport { Modifier } from './modifier';\nimport { Bend } from './bend';\n\nexport class Vibrato extends Modifier {\n static get CATEGORY() { return 'vibratos'; }\n\n // ## Static Methods\n // Arrange vibratos inside a `ModifierContext`.\n static format(vibratos, state, context) {\n if (!vibratos || vibratos.length === 0) return false;\n\n // Vibratos are always on top.\n let text_line = state.top_text_line;\n let width = 0;\n let shift = state.right_shift - 7;\n\n // If there's a bend, drop the text line\n const bends = context.getModifiers(Bend.CATEGORY);\n if (bends && bends.length > 0) {\n text_line--;\n }\n\n // Format Vibratos\n for (let i = 0; i < vibratos.length; ++i) {\n const vibrato = vibratos[i];\n vibrato.setXShift(shift);\n vibrato.setTextLine(text_line);\n width += vibrato.getWidth();\n shift += width;\n }\n\n state.right_shift += width;\n state.top_text_line += 1;\n return true;\n }\n\n // ## Prototype Methods\n constructor() {\n super();\n this.setAttribute('type', 'Vibrato');\n\n this.position = Modifier.Position.RIGHT;\n this.render_options = {\n harsh: false,\n vibrato_width: 20,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n\n this.setVibratoWidth(this.render_options.vibrato_width);\n }\n getCategory() { return Vibrato.CATEGORY; }\n setHarsh(harsh) { this.render_options.harsh = harsh; return this; }\n setVibratoWidth(width) {\n this.render_options.vibrato_width = width;\n this.setWidth(width);\n return this;\n }\n\n draw() {\n const ctx = this.checkContext();\n\n if (!this.note) {\n throw new Vex.RERR('NoNoteForVibrato', \"Can't draw vibrato without an attached note.\");\n }\n\n this.setRendered();\n const start = this.note.getModifierStartXY(Modifier.Position.RIGHT, this.index);\n\n const vx = start.x + this.x_shift;\n const vy = this.note.getYForTopText(this.text_line) + 2;\n\n Vibrato.renderVibrato(ctx, vx, vy, this.render_options);\n }\n\n // Static rendering method that can be called from\n // other classes (e.g. VibratoBracket)\n static renderVibrato(ctx, x, y, opts) {\n const { harsh, vibrato_width, wave_width, wave_girth, wave_height } = opts;\n const num_waves = vibrato_width / wave_width;\n\n ctx.beginPath();\n\n let i;\n if (harsh) {\n ctx.moveTo(x, y + wave_girth + 1);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x + wave_width, y - (wave_height / 2));\n x += wave_width;\n ctx.lineTo(x + wave_width, y + (wave_height / 2));\n x += wave_width;\n }\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.lineTo(x - wave_width, (y - (wave_height / 2)) + wave_girth + 1);\n x -= wave_width;\n ctx.lineTo(x - wave_width, (y + (wave_height / 2)) + wave_girth + 1);\n x -= wave_width;\n }\n ctx.fill();\n } else {\n ctx.moveTo(x, y + wave_girth);\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(x + (wave_width / 2), y - (wave_height / 2), x + wave_width, y);\n x += wave_width;\n ctx.quadraticCurveTo(x + (wave_width / 2), y + (wave_height / 2), x + wave_width, y);\n x += wave_width;\n }\n\n for (i = 0; i < num_waves / 2; ++i) {\n ctx.quadraticCurveTo(\n x - (wave_width / 2),\n (y + (wave_height / 2)) + wave_girth,\n x - wave_width, y + wave_girth);\n x -= wave_width;\n ctx.quadraticCurveTo(\n x - (wave_width / 2),\n (y - (wave_height / 2)) + wave_girth,\n x - wave_width, y + wave_girth);\n x -= wave_width;\n }\n ctx.fill();\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements various types of modifiers to notes (e.g. bends,\n// fingering positions etc.)\n\nimport { Vex } from './vex';\nimport { StaveNote } from './stavenote';\nimport { Dot } from './dot';\nimport { FretHandFinger } from './frethandfinger';\nimport { Accidental } from './accidental';\nimport { NoteSubGroup } from './notesubgroup';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { Stroke } from './strokes';\nimport { StringNumber } from './stringnumber';\nimport { Articulation } from './articulation';\nimport { Ornament } from './ornament';\nimport { Annotation } from './annotation';\nimport { Bend } from './bend';\nimport { Vibrato } from './vibrato';\n\n// To enable logging for this class. Set `Vex.Flow.ModifierContext.DEBUG` to `true`.\nfunction L(...args) { if (ModifierContext.DEBUG) Vex.L('Vex.Flow.ModifierContext', args); }\n\nexport class ModifierContext {\n constructor() {\n // Current modifiers\n this.modifiers = {};\n\n // Formatting data.\n this.preFormatted = false;\n this.postFormatted = false;\n this.width = 0;\n this.spacing = 0;\n this.state = {\n left_shift: 0,\n right_shift: 0,\n text_line: 0,\n top_text_line: 0,\n };\n\n // Add new modifiers to this array. The ordering is significant -- lower\n // modifiers are formatted and rendered before higher ones.\n this.PREFORMAT = [\n StaveNote,\n Dot,\n FretHandFinger,\n Accidental,\n Stroke,\n GraceNoteGroup,\n NoteSubGroup,\n StringNumber,\n Articulation,\n Ornament,\n Annotation,\n Bend,\n Vibrato,\n ];\n\n // If post-formatting is required for an element, add it to this array.\n this.POSTFORMAT = [StaveNote];\n }\n\n addModifier(modifier) {\n const type = modifier.getCategory();\n if (!this.modifiers[type]) this.modifiers[type] = [];\n this.modifiers[type].push(modifier);\n modifier.setModifierContext(this);\n this.preFormatted = false;\n return this;\n }\n\n getModifiers(type) { return this.modifiers[type]; }\n getWidth() { return this.width; }\n getLeftShift() { return this.state.left_shift; }\n getRightShift() { return this.state.right_shift; }\n getState() { return this.state; }\n\n getMetrics() {\n if (!this.formatted) {\n throw new Vex.RERR('UnformattedModifier', 'Unformatted modifier has no metrics.');\n }\n\n return {\n width: this.state.left_shift + this.state.right_shift + this.spacing,\n spacing: this.spacing,\n };\n }\n\n preFormat() {\n if (this.preFormatted) return;\n this.PREFORMAT.forEach((modifier) => {\n L('Preformatting ModifierContext: ', modifier.CATEGORY);\n modifier.format(this.getModifiers(modifier.CATEGORY), this.state, this);\n });\n\n // Update width of this modifier context\n this.width = this.state.left_shift + this.state.right_shift;\n this.preFormatted = true;\n }\n\n postFormat() {\n if (this.postFormatted) return;\n this.POSTFORMAT.forEach((modifier) => {\n L('Postformatting ModifierContext: ', modifier.CATEGORY);\n modifier.postFormat(this.getModifiers(modifier.CATEGORY), this);\n });\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements the formatting and layout algorithms that are used\n// to position notes in a voice. The algorithm can align multiple voices both\n// within a stave, and across multiple staves.\n//\n// To do this, the formatter breaks up voices into a grid of rational-valued\n// `ticks`, to which each note is assigned. Then, minimum widths are assigned\n// to each tick based on the widths of the notes and modifiers in that tick. This\n// establishes the smallest amount of space required for each tick.\n//\n// Finally, the formatter distributes the left over space proportionally to\n// all the ticks, setting the `x` values of the notes in each tick.\n//\n// See `tests/formatter_tests.js` for usage examples. The helper functions included\n// here (`FormatAndDraw`, `FormatAndDrawTab`) also serve as useful usage examples.\n\nimport { Vex } from './vex';\nimport { Beam } from './beam';\nimport { Flow } from './tables';\nimport { Fraction } from './fraction';\nimport { Voice } from './voice';\nimport { StaveConnector } from './staveconnector';\nimport { StaveNote } from './stavenote';\nimport { ModifierContext } from './modifiercontext';\nimport { TickContext } from './tickcontext';\n\n// To enable logging for this class. Set `Vex.Flow.Formatter.DEBUG` to `true`.\nfunction L(...args) { if (Formatter.DEBUG) Vex.L('Vex.Flow.Formatter', args); }\n\n// Helper function to locate the next non-rest note(s).\nfunction lookAhead(notes, restLine, i, compare) {\n // If no valid next note group, nextRestLine is same as current.\n let nextRestLine = restLine;\n\n // Get the rest line for next valid non-rest note group.\n for (i += 1; i < notes.length; i += 1) {\n const note = notes[i];\n if (!note.isRest() && !note.shouldIgnoreTicks()) {\n nextRestLine = note.getLineForRest();\n break;\n }\n }\n\n // Locate the mid point between two lines.\n if (compare && restLine !== nextRestLine) {\n const top = Math.max(restLine, nextRestLine);\n const bot = Math.min(restLine, nextRestLine);\n nextRestLine = Vex.MidLine(top, bot);\n }\n return nextRestLine;\n}\n\n// Take an array of `voices` and place aligned tickables in the same context. Returns\n// a mapping from `tick` to `ContextType`, a list of `tick`s, and the resolution\n// multiplier.\n//\n// Params:\n// * `voices`: Array of `Voice` instances.\n// * `ContextType`: A context class (e.g., `ModifierContext`, `TickContext`)\n// * `addToContext`: Function to add tickable to context.\nfunction createContexts(voices, ContextType, addToContext) {\n if (!voices || !voices.length) {\n throw new Vex.RERR('BadArgument', 'No voices to format');\n }\n\n // Find out highest common multiple of resolution multipliers.\n // The purpose of this is to find out a common denominator\n // for all fractional tick values in all tickables of all voices,\n // so that the values can be expanded and the numerator used\n // as an integer tick value.\n const totalTicks = voices[0].getTotalTicks();\n const resolutionMultiplier = voices.reduce((resolutionMultiplier, voice) => {\n if (!voice.getTotalTicks().equals(totalTicks)) {\n throw new Vex.RERR(\n 'TickMismatch', 'Voices should have same total note duration in ticks.'\n );\n }\n\n if (voice.getMode() === Voice.Mode.STRICT && !voice.isComplete()) {\n throw new Vex.RERR(\n 'IncompleteVoice', 'Voice does not have enough notes.'\n );\n }\n\n return Math.max(\n resolutionMultiplier,\n Fraction.LCM(resolutionMultiplier, voice.getResolutionMultiplier())\n );\n }, 1);\n\n // Initialize tick maps.\n const tickToContextMap = {};\n const tickList = [];\n const contexts = [];\n\n // For each voice, extract notes and create a context for every\n // new tick that hasn't been seen before.\n voices.forEach((voice, voiceIndex) => {\n // Use resolution multiplier as denominator to expand ticks\n // to suitable integer values, so that no additional expansion\n // of fractional tick values is needed.\n const ticksUsed = new Fraction(0, resolutionMultiplier);\n\n voice.getTickables().forEach(tickable => {\n const integerTicks = ticksUsed.numerator;\n\n // If we have no tick context for this tick, create one.\n if (!tickToContextMap[integerTicks]) {\n const newContext = new ContextType({ tickID: integerTicks });\n contexts.push(newContext);\n tickToContextMap[integerTicks] = newContext;\n }\n\n // Add this tickable to the TickContext.\n addToContext(tickable, tickToContextMap[integerTicks], voiceIndex);\n\n // Maintain a sorted list of tick contexts.\n tickList.push(integerTicks);\n ticksUsed.add(tickable.getTicks());\n });\n });\n\n return {\n map: tickToContextMap,\n array: contexts,\n list: Vex.SortAndUnique(tickList, (a, b) => a - b, (a, b) => a === b),\n resolutionMultiplier,\n };\n}\n\nexport class Formatter {\n // Helper function to layout \"notes\" one after the other without\n // regard for proportions. Useful for tests and debugging.\n static SimpleFormat(notes, x = 0, { paddingBetween = 10 } = {}) {\n notes.reduce((x, note) => {\n note.addToModifierContext(new ModifierContext());\n const tick = new TickContext().addTickable(note).preFormat();\n const metrics = tick.getMetrics();\n tick.setX(x + metrics.totalLeftPx);\n\n return x + tick.getWidth() + metrics.totalRightPx + paddingBetween;\n }, x);\n }\n\n // Helper function to plot formatter debug info.\n static plotDebugging(ctx, formatter, xPos, y1, y2, options) {\n options = {\n stavePadding: Vex.Flow.DEFAULT_FONT_STACK[0].lookupMetric('stave.padding'),\n ...options,\n };\n\n const x = xPos + options.stavePadding;\n const contextGaps = formatter.contextGaps;\n function stroke(x1, x2, color) {\n ctx.beginPath();\n ctx.setStrokeStyle(color);\n ctx.setFillStyle(color);\n ctx.setLineWidth(1);\n ctx.fillRect(x1, y1, Math.max(x2 - x1, 0), y2 - y1);\n }\n\n ctx.save();\n ctx.setFont('Arial', 8, '');\n\n contextGaps.gaps.forEach(gap => {\n stroke(x + gap.x1, x + gap.x2, 'rgba(100,200,100,0.4)');\n ctx.setFillStyle('green');\n ctx.fillText(Math.round(gap.x2 - gap.x1), x + gap.x1, y2 + 12);\n });\n\n ctx.setFillStyle('red');\n ctx.fillText(`Loss: ${(formatter.totalCost || 0).toFixed(2)} Shift: ${(formatter.totalShift || 0).toFixed(2)} Gap: ${contextGaps.total.toFixed(2)}`, x - 20, y2 + 27);\n ctx.restore();\n }\n\n // Helper function to format and draw a single voice. Returns a bounding\n // box for the notation.\n //\n // Parameters:\n // * `ctx` - The rendering context\n // * `stave` - The stave to which to draw (`Stave` or `TabStave`)\n // * `notes` - Array of `Note` instances (`StaveNote`, `TextNote`, `TabNote`, etc.)\n // * `params` - One of below:\n // * Setting `autobeam` only `(context, stave, notes, true)` or\n // `(ctx, stave, notes, {autobeam: true})`\n // * Setting `align_rests` a struct is needed `(context, stave, notes, {align_rests: true})`\n // * Setting both a struct is needed `(context, stave, notes, {\n // autobeam: true, align_rests: true})`\n //\n // `autobeam` automatically generates beams for the notes.\n // `align_rests` aligns rests with nearby notes.\n static FormatAndDraw(ctx, stave, notes, params) {\n const options = {\n auto_beam: false,\n align_rests: false,\n };\n\n if (typeof params === 'object') {\n Vex.Merge(options, params);\n } else if (typeof params === 'boolean') {\n options.auto_beam = params;\n }\n\n // Start by creating a voice and adding all the notes to it.\n const voice = new Voice(Flow.TIME4_4)\n .setMode(Voice.Mode.SOFT)\n .addTickables(notes);\n\n // Then create beams, if requested.\n const beams = options.auto_beam ? Beam.applyAndGetBeams(voice) : [];\n\n // Instantiate a `Formatter` and format the notes.\n new Formatter()\n .joinVoices([voice], { align_rests: options.align_rests })\n .formatToStave([voice], stave, { align_rests: options.align_rests, stave });\n\n // Render the voice and beams to the stave.\n voice.setStave(stave).draw(ctx, stave);\n beams.forEach(beam => beam.setContext(ctx).draw());\n\n // Return the bounding box of the voice.\n return voice.getBoundingBox();\n }\n\n // Helper function to format and draw aligned tab and stave notes in two\n // separate staves.\n //\n // Parameters:\n // * `ctx` - The rendering context\n // * `tabstave` - A `TabStave` instance on which to render `TabNote`s.\n // * `stave` - A `Stave` instance on which to render `Note`s.\n // * `notes` - Array of `Note` instances for the stave (`StaveNote`, `BarNote`, etc.)\n // * `tabnotes` - Array of `Note` instances for the tab stave (`TabNote`, `BarNote`, etc.)\n // * `autobeam` - Automatically generate beams.\n // * `params` - A configuration object:\n // * `autobeam` automatically generates beams for the notes.\n // * `align_rests` aligns rests with nearby notes.\n static FormatAndDrawTab(ctx, tabstave, stave, tabnotes, notes, autobeam, params) {\n const opts = {\n auto_beam: autobeam,\n align_rests: false,\n };\n\n if (typeof params === 'object') {\n Vex.Merge(opts, params);\n } else if (typeof params === 'boolean') {\n opts.auto_beam = params;\n }\n\n // Create a `4/4` voice for `notes`.\n const notevoice = new Voice(Flow.TIME4_4)\n .setMode(Voice.Mode.SOFT)\n .addTickables(notes);\n\n // Create a `4/4` voice for `tabnotes`.\n const tabvoice = new Voice(Flow.TIME4_4)\n .setMode(Voice.Mode.SOFT)\n .addTickables(tabnotes);\n\n // Then create beams, if requested.\n const beams = opts.auto_beam ? Beam.applyAndGetBeams(notevoice) : [];\n\n // Instantiate a `Formatter` and align tab and stave notes.\n new Formatter()\n .joinVoices([notevoice], { align_rests: opts.align_rests })\n .joinVoices([tabvoice])\n .formatToStave([notevoice, tabvoice], stave, { align_rests: opts.align_rests });\n\n // Render voices and beams to staves.\n notevoice.draw(ctx, stave);\n tabvoice.draw(ctx, tabstave);\n beams.forEach(beam => beam.setContext(ctx).draw());\n\n // Draw a connector between tab and note staves.\n new StaveConnector(stave, tabstave).setContext(ctx).draw();\n }\n\n // Auto position rests based on previous/next note positions.\n //\n // Params:\n // * `notes`: An array of notes.\n // * `alignAllNotes`: If set to false, only aligns non-beamed notes.\n // * `alignTuplets`: If set to false, ignores tuplets.\n static AlignRestsToNotes(notes, alignAllNotes, alignTuplets) {\n notes.forEach((note, index) => {\n if (note instanceof StaveNote && note.isRest()) {\n if (note.tuplet && !alignTuplets) return;\n\n // If activated rests not on default can be rendered as specified.\n const position = note.getGlyph().position.toUpperCase();\n if (position !== 'R/4' && position !== 'B/4') return;\n\n if (alignAllNotes || note.beam != null) {\n // Align rests with previous/next notes.\n const props = note.getKeyProps()[0];\n if (index === 0) {\n props.line = lookAhead(notes, props.line, index, false);\n note.setKeyLine(0, props.line);\n } else if (index > 0 && index < notes.length) {\n // If previous note is a rest, use its line number.\n let restLine;\n if (notes[index - 1].isRest()) {\n restLine = notes[index - 1].getKeyProps()[0].line;\n props.line = restLine;\n } else {\n restLine = notes[index - 1].getLineForRest();\n // Get the rest line for next valid non-rest note group.\n props.line = lookAhead(notes, restLine, index, true);\n }\n note.setKeyLine(0, props.line);\n }\n }\n }\n });\n\n return this;\n }\n\n constructor(options) {\n this.options = {\n softmaxFactor: null,\n maxIterations: 2,\n ...options\n };\n\n // Minimum width required to render all the notes in the voices.\n this.minTotalWidth = 0;\n\n // This is set to `true` after `minTotalWidth` is calculated.\n this.hasMinTotalWidth = false;\n\n // Total number of ticks in the voice.\n this.totalTicks = new Fraction(0, 1);\n\n // Arrays of tick and modifier contexts.\n this.tickContexts = null;\n this.modiferContexts = null;\n\n // Gaps between contexts, for free movement of notes post\n // formatting.\n this.contextGaps = {\n total: 0,\n gaps: [],\n };\n\n this.voices = [];\n this.iterationsCompleted = 0;\n this.lossHistory = [];\n }\n\n // Find all the rests in each of the `voices` and align them\n // to neighboring notes. If `alignAllNotes` is `false`, then only\n // align non-beamed notes.\n alignRests(voices, alignAllNotes) {\n if (!voices || !voices.length) {\n throw new Vex.RERR('BadArgument', 'No voices to format rests');\n }\n\n voices.forEach(voice =>\n Formatter.AlignRestsToNotes(voice.getTickables(), alignAllNotes));\n }\n\n // Calculate the minimum width required to align and format `voices`.\n preCalculateMinTotalWidth(voices) {\n // Cache results.\n if (this.hasMinTotalWidth) return this.minTotalWidth;\n\n // Create tick contexts if not already created.\n if (!this.tickContexts) {\n if (!voices) {\n throw new Vex.RERR(\n 'BadArgument', \"'voices' required to run preCalculateMinTotalWidth\"\n );\n }\n\n this.createTickContexts(voices);\n }\n\n const { list: contextList, map: contextMap } = this.tickContexts;\n\n // Go through each tick context and calculate total width.\n this.minTotalWidth = contextList\n .map(tick => {\n const context = contextMap[tick];\n context.preFormat();\n return context.getWidth();\n })\n .reduce((a, b) => a + b, 0);\n\n this.hasMinTotalWidth = true;\n\n return this.minTotalWidth;\n }\n\n // Get minimum width required to render all voices. Either `format` or\n // `preCalculateMinTotalWidth` must be called before this method.\n getMinTotalWidth() {\n if (!this.hasMinTotalWidth) {\n throw new Vex.RERR(\n 'NoMinTotalWidth',\n \"Call 'preCalculateMinTotalWidth' or 'preFormat' before calling 'getMinTotalWidth'\"\n );\n }\n\n return this.minTotalWidth;\n }\n\n // Create `ModifierContext`s for each tick in `voices`.\n createModifierContexts(voices) {\n const contexts = createContexts(\n voices,\n ModifierContext,\n (tickable, context) => tickable.addToModifierContext(context)\n );\n\n this.modiferContexts = contexts;\n return contexts;\n }\n\n // Create `TickContext`s for each tick in `voices`. Also calculate the\n // total number of ticks in voices.\n createTickContexts(voices) {\n const contexts = createContexts(\n voices,\n TickContext,\n (tickable, context, voiceIndex) => context.addTickable(tickable, voiceIndex)\n );\n\n contexts.array.forEach(context => {\n context.tContexts = contexts.array;\n });\n\n this.totalTicks = voices[0].getTicksUsed().clone();\n this.tickContexts = contexts;\n return contexts;\n }\n\n // This is the core formatter logic. Format voices and justify them\n // to `justifyWidth` pixels. `renderingContext` is required to justify elements\n // that can't retreive widths without a canvas. This method sets the `x` positions\n // of all the tickables/notes in the formatter.\n preFormat(justifyWidth = 0, renderingContext, voices, stave) {\n // Initialize context maps.\n const contexts = this.tickContexts;\n const { list: contextList, map: contextMap } = contexts;\n\n // Reset loss history for evaluator.\n this.lossHistory = [];\n\n // If voices and a stave were provided, set the Stave for each voice\n // and preFormat to apply Y values to the notes;\n if (voices && stave) {\n voices.forEach(voice => voice.setStave(stave).preFormat());\n }\n\n // Now distribute the ticks to each tick context, and assign them their\n // own X positions.\n let x = 0;\n let shift = 0;\n this.minTotalWidth = 0;\n\n // Pass 1: Give each note maximum width requested by context.\n contextList.forEach((tick) => {\n const context = contextMap[tick];\n if (renderingContext) context.setContext(renderingContext);\n\n // Make sure that all tickables in this context have calculated their\n // space requirements.\n context.preFormat();\n\n const width = context.getWidth();\n this.minTotalWidth += width;\n\n const metrics = context.getMetrics();\n x = x + shift + metrics.totalLeftPx;\n context.setX(x);\n\n // Calculate shift for the next tick.\n shift = width - metrics.totalLeftPx;\n });\n\n this.minTotalWidth = x + shift;\n this.hasMinTotalWidth = true;\n\n // No justification needed. End formatting.\n if (justifyWidth <= 0) return this.evaluate();\n\n\n // Start justification. Subtract the right extra pixels of the final context because the formatter\n // justifies based on the context's X position, which is the left-most part of the note head.\n const firstContext = contextMap[contextList[0]];\n const lastContext = contextMap[contextList[contextList.length - 1]];\n\n // Calculate the \"distance error\" between the tick contexts. The expected distance is the spacing proportional to\n // the softmax of the ticks.\n function calculateIdealDistances(adjustedJustifyWidth) {\n return contextList.map((tick, i) => {\n const context = contextMap[tick];\n const voices = context.getTickablesByVoice();\n let backTickable = null;\n if (i > 0) {\n const prevContext = contextMap[contextList[i - 1]];\n // Go through each tickable and search backwards for another tickable\n // in the same voice. If found, use that duration (ticks) to calculate\n // the expected distance.\n for (let j = i - 1; j >= 0; j--) {\n const backTick = contextMap[contextList[j]];\n const backVoices = backTick.getTickablesByVoice();\n\n // Look for matching voices between tick contexts.\n const matchingVoices = [];\n Object.keys(voices).forEach(v => {\n if (backVoices[v]) {\n matchingVoices.push(v);\n }\n });\n\n if (matchingVoices.length > 0) {\n // Found matching voices, get largest duration\n let maxTicks = 0;\n let maxNegativeShiftPx = Infinity;\n let expectedDistance = 0;\n\n // eslint-disable-next-line\n matchingVoices.forEach(v => {\n const ticks = backVoices[v].getTicks().value();\n if (ticks > maxTicks) {\n backTickable = backVoices[v];\n maxTicks = ticks;\n }\n\n // Calculate the limits of the shift based on modifiers, etc.\n const thisTickable = voices[v];\n const insideLeftEdge = thisTickable.getX() - (thisTickable.getMetrics().modLeftPx + thisTickable.getMetrics().leftDisplacedHeadPx);\n\n const backMetrics = backVoices[v].getMetrics();\n const insideRightEdge = backVoices[v].getX() + backMetrics.notePx + backMetrics.modRightPx + backMetrics.rightDisplacedHeadPx;\n\n // Don't allow shifting if notes in the same voice can collide\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, insideLeftEdge - insideRightEdge);\n });\n\n // Don't shift further left than the notehead of the last context\n maxNegativeShiftPx = Math.min(maxNegativeShiftPx, context.getX() - prevContext.getX());\n\n // Calculate the expected distance of the current context from the last matching tickable. The\n // distance is scaled down by the softmax for the voice.\n expectedDistance = backTickable.getVoice().softmax(maxTicks) * adjustedJustifyWidth;\n\n return {\n expectedDistance,\n maxNegativeShiftPx,\n fromTickable: backTickable,\n };\n }\n }\n }\n\n return { errorPx: 0, fromTickablePx: 0, maxNegativeShiftPx: 0 };\n });\n }\n\n\n function shiftToIdealDistances(idealDistances) {\n // Distribute ticks to the contexts based on the calculated distance error.\n const centerX = adjustedJustifyWidth / 2;\n let spaceAccum = 0;\n let negativeSpaceAccum = 0;\n\n contextList.forEach((tick, index) => {\n const context = contextMap[tick];\n if (index > 0) {\n const x = context.getX();\n const ideal = idealDistances[index];\n const errorPx = (ideal.fromTickable.getX() + ideal.expectedDistance) - (x + spaceAccum);\n\n let negativeShiftPx = 0;\n if (errorPx > 0) {\n spaceAccum += errorPx;\n } else if (errorPx < 0) {\n negativeShiftPx = Math.min(ideal.maxNegativeShiftPx + negativeSpaceAccum, Math.abs(errorPx));\n }\n\n context.setX(x + spaceAccum - negativeShiftPx);\n negativeSpaceAccum += negativeShiftPx;\n }\n\n // Move center aligned tickables to middle\n context.getCenterAlignedTickables().forEach(tickable => { // eslint-disable-line\n tickable.center_x_shift = centerX - context.getX();\n });\n });\n\n return lastContext.getX() - firstContext.getX();\n }\n\n\n const adjustedJustifyWidth = justifyWidth -\n lastContext.getMetrics().notePx -\n lastContext.getMetrics().totalRightPx -\n firstContext.getMetrics().totalLeftPx;\n let targetWidth = adjustedJustifyWidth;\n let actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n\n let iterations = this.options.maxIterations;\n while (actualWidth > (adjustedJustifyWidth + lastContext.getMetrics().notePx) && iterations > 0) {\n // If we couldn't fit all the notes into the jusification width, it's because the softmax-scaled\n // widths between different durations differ across stave (e.g., 1 quarter note is not the same pixel-width\n // as 4 16th-notes). Run another pass, now that we know how much to justify.\n targetWidth -= (actualWidth - targetWidth);\n actualWidth = shiftToIdealDistances(calculateIdealDistances(targetWidth));\n iterations--;\n }\n\n // Just one context. Done formatting.\n if (contextList.length === 1) return null;\n\n this.justifyWidth = justifyWidth;\n return this.evaluate();\n }\n\n // Calculate the total cost of this formatting decision.\n evaluate() {\n const justifyWidth = this.justifyWidth;\n // Calculate available slack per tick context. This works out how much freedom\n // to move a context has in either direction, without affecting other notes.\n this.contextGaps = { total: 0, gaps: [] };\n this.tickContexts.list.forEach((tick, index) => {\n if (index === 0) return;\n const prevTick = this.tickContexts.list[index - 1];\n const prevContext = this.tickContexts.map[prevTick];\n const context = this.tickContexts.map[tick];\n const prevMetrics = prevContext.getMetrics();\n const currMetrics = context.getMetrics();\n\n // Calculate X position of right edge of previous note\n const insideRightEdge = prevContext.getX() + prevMetrics.notePx + prevMetrics.totalRightPx;\n // Calculate X position of left edge of current note\n const insideLeftEdge = context.getX() - (currMetrics.totalLeftPx);\n const gap = insideLeftEdge - insideRightEdge;\n this.contextGaps.total += gap;\n this.contextGaps.gaps.push({ x1: insideRightEdge, x2: insideLeftEdge });\n\n // Tell the tick contexts how much they can reposition themselves.\n context.getFormatterMetrics().freedom.left = gap;\n prevContext.getFormatterMetrics().freedom.right = gap;\n });\n\n // Calculate mean distance in each voice for each duration type, then calculate\n // how far each note is from the mean.\n const durationStats = this.durationStats = {};\n\n function updateStats(duration, space) {\n const stats = durationStats[duration];\n if (stats === undefined) {\n durationStats[duration] = { mean: space, count: 1 };\n } else {\n stats.count += 1;\n stats.mean = (stats.mean + space) / 2;\n }\n }\n\n this.voices.forEach(voice => {\n voice.getTickables().forEach((note, i, notes) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getMetrics();\n const formatterMetrics = note.getFormatterMetrics();\n const leftNoteEdge = note.getX() + metrics.notePx + metrics.totalRightPx;\n let space = 0;\n\n if (i < (notes.length - 1)) {\n const rightNote = notes[i + 1];\n const rightMetrics = rightNote.getMetrics();\n const rightNoteEdge = rightNote.getX() - rightMetrics.totalLeftPx;\n\n space = rightNoteEdge - leftNoteEdge;\n formatterMetrics.space.used = rightNote.getX() - note.getX();\n rightNote.getFormatterMetrics().freedom.left = space;\n } else {\n space = justifyWidth - leftNoteEdge;\n formatterMetrics.space.used = justifyWidth - note.getX();\n }\n\n formatterMetrics.freedom.right = space;\n updateStats(duration, formatterMetrics.space.used);\n });\n });\n\n // Calculate how much each note deviates from the mean. Loss function is square\n // root of the sum of squared deviations.\n let totalDeviation = 0;\n this.voices.forEach(voice => {\n voice.getTickables().forEach((note) => {\n const duration = note.getTicks().clone().simplify().toString();\n const metrics = note.getFormatterMetrics();\n\n metrics.space.mean = durationStats[duration].mean;\n metrics.duration = duration;\n metrics.iterations += 1;\n metrics.space.deviation = metrics.space.used - metrics.space.mean;\n\n totalDeviation += Math.pow(metrics.space.deviation, 2);\n });\n });\n\n this.totalCost = Math.sqrt(totalDeviation);\n this.lossHistory.push(this.totalCost);\n return this.totalCost;\n }\n\n // Run a single iteration of rejustification. At a high level, this method calculates\n // the overall \"loss\" (or cost) of this layout, and repositions tickcontexts in an\n // attempt to reduce the cost. You can call this method multiple times until it finds\n // and oscillates around a global minimum.\n //\n // Alpha is the \"learning rate\" for the formatter. It determines how much of a shift\n // the formatter should make based on its cost function.\n tune(options) {\n options = {\n alpha: 0.5,\n ...options,\n };\n\n const sum = (arr) => arr.reduce((a, b) => a + b);\n\n // Move `current` tickcontext by `shift` pixels, and adjust the freedom\n // on adjacent tickcontexts.\n function move(current, prev, next, shift) {\n current.setX(current.getX() + shift);\n current.getFormatterMetrics().freedom.left += shift;\n current.getFormatterMetrics().freedom.right -= shift;\n\n if (prev) prev.getFormatterMetrics().freedom.right += shift;\n if (next) next.getFormatterMetrics().freedom.left -= shift;\n }\n\n let shift = 0;\n this.totalShift = 0;\n this.tickContexts.list.forEach((tick, index, list) => {\n const context = this.tickContexts.map[tick];\n const prevContext = (index > 0) ? this.tickContexts.map[list[index - 1]] : null;\n const nextContext = (index < list.length - 1) ? this.tickContexts.map[list[index + 1]] : null;\n\n move(context, prevContext, nextContext, shift);\n\n const cost = -sum(\n context.getTickables().map(t => t.getFormatterMetrics().space.deviation));\n\n if (cost > 0) {\n shift = -Math.min(context.getFormatterMetrics().freedom.right, Math.abs(cost));\n } else if (cost < 0) {\n if (nextContext) {\n shift = Math.min(nextContext.getFormatterMetrics().freedom.right, Math.abs(cost));\n } else {\n shift = 0;\n }\n }\n\n shift *= options.alpha;\n this.totalShift += shift;\n });\n\n this.iterationsCompleted++;\n return this.evaluate();\n }\n\n // This is the top-level call for all formatting logic completed\n // after `x` *and* `y` values have been computed for the notes\n // in the voices.\n postFormat() {\n const postFormatContexts = (contexts) =>\n contexts.list.forEach(tick => contexts.map[tick].postFormat());\n\n postFormatContexts(this.modiferContexts);\n postFormatContexts(this.tickContexts);\n\n return this;\n }\n\n // Take all `voices` and create `ModifierContext`s out of them. This tells\n // the formatters that the voices belong on a single stave.\n joinVoices(voices) {\n this.createModifierContexts(voices);\n this.hasMinTotalWidth = false;\n return this;\n }\n\n // Align rests in voices, justify the contexts, and position the notes\n // so voices are aligned and ready to render onto the stave. This method\n // mutates the `x` positions of all tickables in `voices`.\n //\n // Voices are full justified to fit in `justifyWidth` pixels.\n //\n // Set `options.context` to the rendering context. Set `options.align_rests`\n // to true to enable rest alignment.\n format(voices, justifyWidth, options) {\n const opts = {\n align_rests: false,\n context: null,\n stave: null,\n ...options,\n };\n\n this.voices = voices;\n if (this.options.softmaxFactor) {\n this.voices.forEach(v => v.setSoftmaxFactor(this.options.softmaxFactor));\n }\n\n this.alignRests(voices, opts.align_rests);\n this.createTickContexts(voices);\n this.preFormat(justifyWidth, opts.context, voices, opts.stave);\n\n // Only postFormat if a stave was supplied for y value formatting\n if (opts.stave) this.postFormat();\n\n return this;\n }\n\n // This method is just like `format` except that the `justifyWidth` is inferred\n // from the `stave`.\n formatToStave(voices, stave, options) {\n options = {\n padding: 10,\n ...options\n };\n\n const justifyWidth = stave.getNoteEndX() - stave.getNoteStartX() - options.padding;\n L('Formatting voices to width: ', justifyWidth);\n return this.format(voices, justifyWidth, { context: stave.getContext(), ...options });\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// A base class for stave modifiers (e.g. clefs, key signatures)\n\nimport { Element } from './element';\n\nexport class StaveModifier extends Element {\n static get Position() {\n return {\n LEFT: 1,\n RIGHT: 2,\n ABOVE: 3,\n BELOW: 4,\n BEGIN: 5,\n END: 6,\n };\n }\n\n constructor() {\n super();\n this.setAttribute('type', 'StaveModifier');\n\n this.padding = 10;\n this.position = StaveModifier.Position.ABOVE;\n this.layoutMetrics = null;\n }\n\n getPosition() { return this.position; }\n setPosition(position) { this.position = position; return this; }\n getStave() { return this.stave; }\n setStave(stave) { this.stave = stave; return this; }\n getWidth() { return this.width; }\n setWidth(width) { this.width = width; return this; }\n getX() { return this.x; }\n setX(x) { this.x = x; return this; }\n getCategory() { return ''; }\n makeSpacer(padding) {\n // TODO(0xfe): Return an instance of type `Spacer` based on `GhostNote`\n // instead of this hack.\n\n return {\n getContext() { return true; },\n setStave() {},\n renderToStave() {},\n getMetrics() {\n return { width: padding };\n },\n };\n }\n placeGlyphOnLine(glyph, stave, line, customShift = 0) {\n glyph.setYShift(stave.getYForLine(line) - stave.getYForGlyphs() + customShift);\n }\n getPadding(index) {\n return (index !== undefined && index < 2 ? 0 : this.padding);\n }\n setPadding(padding) { this.padding = padding; return this; }\n setLayoutMetrics(layoutMetrics) {\n this.layoutMetrics = layoutMetrics;\n return this;\n }\n getLayoutMetrics() {\n return this.layoutMetrics;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// Author Larry Kuhns 2011\n\nimport { Flow } from './tables';\nimport { StaveModifier } from './stavemodifier';\n\nexport class Barline extends StaveModifier {\n static get CATEGORY() { return 'barlines'; }\n static get type() {\n return {\n SINGLE: 1,\n DOUBLE: 2,\n END: 3,\n REPEAT_BEGIN: 4,\n REPEAT_END: 5,\n REPEAT_BOTH: 6,\n NONE: 7,\n };\n }\n\n static get typeString() {\n return {\n single: Barline.type.SINGLE,\n double: Barline.type.DOUBLE,\n end: Barline.type.END,\n repeatBegin: Barline.type.REPEAT_BEGIN,\n repeatEnd: Barline.type.REPEAT_END,\n repeatBoth: Barline.type.REPEAT_BOTH,\n none: Barline.type.NONE,\n };\n }\n\n /**\n * @constructor\n */\n constructor(type) {\n super();\n this.setAttribute('type', 'Barline');\n this.thickness = Flow.STAVE_LINE_THICKNESS;\n\n const TYPE = Barline.type;\n this.widths = {};\n this.widths[TYPE.SINGLE] = 5;\n this.widths[TYPE.DOUBLE] = 5;\n this.widths[TYPE.END] = 5;\n this.widths[TYPE.REPEAT_BEGIN] = 5;\n this.widths[TYPE.REPEAT_END] = 5;\n this.widths[TYPE.REPEAT_BOTH] = 5;\n this.widths[TYPE.NONE] = 5;\n\n this.paddings = {};\n this.paddings[TYPE.SINGLE] = 0;\n this.paddings[TYPE.DOUBLE] = 0;\n this.paddings[TYPE.END] = 0;\n this.paddings[TYPE.REPEAT_BEGIN] = 15;\n this.paddings[TYPE.REPEAT_END] = 15;\n this.paddings[TYPE.REPEAT_BOTH] = 15;\n this.paddings[TYPE.NONE] = 0;\n\n this.layoutMetricsMap = {};\n this.layoutMetricsMap[TYPE.SINGLE] = {\n xMin: 0,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.DOUBLE] = {\n xMin: -3,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.END] = {\n xMin: -5,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_END] = {\n xMin: -10,\n xMax: 1,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BEGIN] = {\n xMin: -2,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.REPEAT_BOTH] = {\n xMin: -10,\n xMax: 10,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.layoutMetricsMap[TYPE.NONE] = {\n xMin: 0,\n xMax: 0,\n paddingLeft: 5,\n paddingRight: 5,\n };\n this.setPosition(StaveModifier.Position.BEGIN);\n this.setType(type);\n }\n getCategory() { return Barline.CATEGORY; }\n getType() { return this.type; }\n setType(type) {\n this.type = typeof(type) === 'string'\n ? Barline.typeString[type]\n : type;\n\n this.setWidth(this.widths[this.type]);\n this.setPadding(this.paddings[this.type]);\n this.setLayoutMetrics(this.layoutMetricsMap[this.type]);\n return this;\n }\n\n // Draw barlines\n draw(stave) {\n stave.checkContext();\n this.setRendered();\n\n switch (this.type) {\n case Barline.type.SINGLE:\n this.drawVerticalBar(stave, this.x, false);\n break;\n case Barline.type.DOUBLE:\n this.drawVerticalBar(stave, this.x, true);\n break;\n case Barline.type.END:\n this.drawVerticalEndBar(stave, this.x);\n break;\n case Barline.type.REPEAT_BEGIN:\n // If the barline is shifted over (in front of clef/time/key)\n // Draw vertical bar at the beginning.\n this.drawRepeatBar(stave, this.x, true);\n if (stave.getX() !== this.x) {\n this.drawVerticalBar(stave, stave.getX());\n }\n\n break;\n case Barline.type.REPEAT_END:\n this.drawRepeatBar(stave, this.x, false);\n break;\n case Barline.type.REPEAT_BOTH:\n this.drawRepeatBar(stave, this.x, false);\n this.drawRepeatBar(stave, this.x, true);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n }\n\n drawVerticalBar(stave, x, double_bar) {\n stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n if (double_bar) {\n stave.context.fillRect(x - 3, topY, 1, botY - topY);\n }\n stave.context.fillRect(x, topY, 1, botY - topY);\n }\n\n drawVerticalEndBar(stave, x) {\n stave.checkContext();\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n stave.context.fillRect(x - 5, topY, 1, botY - topY);\n stave.context.fillRect(x - 2, topY, 3, botY - topY);\n }\n\n drawRepeatBar(stave, x, begin) {\n stave.checkContext();\n\n const topY = stave.getTopLineTopY();\n const botY = stave.getBottomLineBottomY();\n let x_shift = 3;\n\n if (!begin) {\n x_shift = -5;\n }\n\n stave.context.fillRect(x + x_shift, topY, 1, botY - topY);\n stave.context.fillRect(x - 2, topY, 3, botY - topY);\n\n const dot_radius = 2;\n\n // Shift dots left or right\n if (begin) {\n x_shift += 4;\n } else {\n x_shift -= 4;\n }\n\n const dot_x = (x + x_shift) + (dot_radius / 2);\n\n // calculate the y offset based on number of stave lines\n let y_offset = (stave.getNumLines() - 1) * stave.getSpacingBetweenLines();\n y_offset = (y_offset / 2) - (stave.getSpacingBetweenLines() / 2);\n let dot_y = topY + y_offset + (dot_radius / 2);\n\n // draw the top repeat dot\n stave.context.beginPath();\n stave.context.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n stave.context.fill();\n\n // draw the bottom repeat dot\n dot_y += stave.getSpacingBetweenLines();\n stave.context.beginPath();\n stave.context.arc(dot_x, dot_y, dot_radius, 0, Math.PI * 2, false);\n stave.context.fill();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\nimport { StaveModifier } from './stavemodifier';\nimport { Glyph } from './glyph';\n\nexport class Repetition extends StaveModifier {\n static get CATEGORY() { return 'repetitions'; }\n static get type() {\n return {\n NONE: 1, // no coda or segno\n CODA_LEFT: 2, // coda at beginning of stave\n CODA_RIGHT: 3, // coda at end of stave\n SEGNO_LEFT: 4, // segno at beginning of stave\n SEGNO_RIGHT: 5, // segno at end of stave\n DC: 6, // D.C. at end of stave\n DC_AL_CODA: 7, // D.C. al coda at end of stave\n DC_AL_FINE: 8, // D.C. al Fine end of stave\n DS: 9, // D.S. at end of stave\n DS_AL_CODA: 10, // D.S. al coda at end of stave\n DS_AL_FINE: 11, // D.S. al Fine at end of stave\n FINE: 12, // Fine at end of stave\n };\n }\n\n constructor(type, x, y_shift) {\n super();\n this.setAttribute('type', 'Repetition');\n\n this.symbol_type = type;\n this.x = x;\n this.x_shift = 0;\n this.y_shift = y_shift;\n this.font = {\n family: 'times',\n size: 12,\n weight: 'bold italic',\n };\n }\n\n getCategory() { return Repetition.CATEGORY; }\n setShiftX(x) { this.x_shift = x; return this; }\n setShiftY(y) { this.y_shift = y; return this; }\n\n draw(stave, x) {\n this.setRendered();\n\n switch (this.symbol_type) {\n case Repetition.type.CODA_RIGHT:\n this.drawCodaFixed(stave, x + stave.width);\n break;\n case Repetition.type.CODA_LEFT:\n this.drawSymbolText(stave, x, 'Coda', true);\n break;\n case Repetition.type.SEGNO_LEFT:\n this.drawSignoFixed(stave, x);\n break;\n case Repetition.type.SEGNO_RIGHT:\n this.drawSignoFixed(stave, x + stave.width);\n break;\n case Repetition.type.DC:\n this.drawSymbolText(stave, x, 'D.C.', false);\n break;\n case Repetition.type.DC_AL_CODA:\n this.drawSymbolText(stave, x, 'D.C. al', true);\n break;\n case Repetition.type.DC_AL_FINE:\n this.drawSymbolText(stave, x, 'D.C. al Fine', false);\n break;\n case Repetition.type.DS:\n this.drawSymbolText(stave, x, 'D.S.', false);\n break;\n case Repetition.type.DS_AL_CODA:\n this.drawSymbolText(stave, x, 'D.S. al', true);\n break;\n case Repetition.type.DS_AL_FINE:\n this.drawSymbolText(stave, x, 'D.S. al Fine', false);\n break;\n case Repetition.type.FINE:\n this.drawSymbolText(stave, x, 'Fine', false);\n break;\n default:\n break;\n }\n\n return this;\n }\n\n drawCodaFixed(stave, x) {\n const y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;\n Glyph.renderGlyph(stave.context, this.x + x + this.x_shift, y + 25, 40, 'coda', { category: 'coda' });\n return this;\n }\n\n drawSignoFixed(stave, x) {\n const y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;\n Glyph.renderGlyph(stave.context, this.x + x + this.x_shift, y + 25, 30, 'segno', { category: 'segno' });\n return this;\n }\n\n drawSymbolText(stave, x, text, draw_coda) {\n const ctx = stave.checkContext();\n\n ctx.save();\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n // Default to right symbol\n let text_x = 0 + this.x_shift;\n let symbol_x = x + this.x_shift;\n if (this.symbol_type === Repetition.type.CODA_LEFT) {\n // Offset Coda text to right of stave beginning\n text_x = this.x + stave.options.vertical_bar_width;\n symbol_x = text_x + ctx.measureText(text).width + 12;\n } else {\n // Offset Signo text to left stave end\n symbol_x = this.x + x + stave.width - 5 + this.x_shift;\n text_x = symbol_x - + ctx.measureText(text).width - 12;\n }\n\n const y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;\n if (draw_coda) {\n Glyph.renderGlyph(ctx, symbol_x, y, 40, 'coda', { category: 'coda' });\n }\n\n ctx.fillText(text, text_x, y + 5);\n ctx.restore();\n\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\nimport { StaveModifier } from './stavemodifier';\n\nexport class StaveSection extends StaveModifier {\n static get CATEGORY() { return 'stavesection'; }\n\n constructor(section, x, shift_y) {\n super();\n this.setAttribute('type', 'StaveSection');\n\n this.setWidth(16);\n this.section = section;\n this.x = x;\n this.shift_x = 0;\n this.shift_y = shift_y;\n this.font = {\n family: 'sans-serif',\n size: 12,\n weight: 'bold',\n };\n }\n\n getCategory() { return StaveSection.CATEGORY; }\n setStaveSection(section) { this.section = section; return this; }\n setShiftX(x) { this.shift_x = x; return this; }\n setShiftY(y) { this.shift_y = y; return this; }\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n\n ctx.save();\n ctx.lineWidth = 2;\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n const text_width = ctx.measureText('' + this.section).width;\n let width = text_width + 6; // add left & right padding\n if (width < 18) width = 18;\n const height = 20;\n // Seems to be a good default y\n const y = stave.getYForTopText(3) + this.shift_y;\n let x = this.x + shift_x;\n ctx.beginPath();\n ctx.lineWidth = 2;\n ctx.rect(x, y, width, height);\n ctx.stroke();\n x += (width - text_width) / 2;\n ctx.fillText('' + this.section, x, y + 16);\n ctx.restore();\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Radosaw Eichler 2012\n\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\nimport { StaveModifier } from './stavemodifier';\nimport { Glyph } from './glyph';\n\nexport class StaveTempo extends StaveModifier {\n static get CATEGORY() { return 'stavetempo'; }\n\n constructor(tempo, x, shift_y) {\n super();\n this.setAttribute('type', 'StaveTempo');\n\n this.tempo = tempo;\n this.position = Modifier.Position.ABOVE;\n this.x = x;\n this.shift_x = 10;\n this.shift_y = shift_y;\n this.font = {\n family: 'times',\n size: 14,\n weight: 'bold',\n };\n this.render_options = {\n glyph_font_scale: 30, // font size for note\n };\n }\n getCategory() { return StaveTempo.CATEGORY; }\n setTempo(tempo) { this.tempo = tempo; return this; }\n setShiftX(x) { this.shift_x = x; return this; }\n setShiftY(y) { this.shift_y = y; return this; }\n\n draw(stave, shift_x) {\n const ctx = stave.checkContext();\n this.setRendered();\n\n const options = this.render_options;\n // FIXME: What does the '38' mean? Why 38? Is that supposed to\n // be the default font size for standard notation?\n const scale = options.glyph_font_scale / 38;\n const name = this.tempo.name;\n const duration = this.tempo.duration;\n const dots = this.tempo.dots;\n const bpm = this.tempo.bpm;\n const font = this.font;\n let x = this.x + this.shift_x + shift_x;\n const y = stave.getYForTopText(1) + this.shift_y;\n\n ctx.save();\n\n if (name) {\n ctx.setFont(font.family, font.size, font.weight);\n ctx.fillText(name, x, y);\n x += ctx.measureText(name).width;\n }\n\n if (duration && bpm) {\n ctx.setFont(font.family, font.size, 'normal');\n\n if (name) {\n x += ctx.measureText(' ').width;\n ctx.fillText('(', x, y);\n x += ctx.measureText('(').width;\n }\n\n const code = Flow.getGlyphProps(duration);\n\n x += 3 * scale;\n Glyph.renderGlyph(ctx, x, y, options.glyph_font_scale, code.code_head);\n x += code.getWidth() * scale;\n\n // Draw stem and flags\n if (code.stem) {\n let stem_height = 30;\n\n if (code.beam_count) stem_height += 3 * (code.beam_count - 1);\n\n stem_height *= scale;\n\n const y_top = y - stem_height;\n ctx.fillRect(x - scale, y_top, scale, stem_height);\n\n if (code.flag) {\n Glyph.renderGlyph(ctx, x, y_top, options.glyph_font_scale,\n code.code_flag_upstem, { category: 'flag.staveTempo' });\n\n if (!dots) x += 6 * scale;\n }\n }\n\n // Draw dot\n for (let i = 0; i < dots; i++) {\n x += 6 * scale;\n ctx.beginPath();\n ctx.arc(x, y + 2 * scale, 2 * scale, 0, Math.PI * 2, false);\n ctx.fill();\n }\n\n ctx.fillText(' = ' + bpm + (name ? ')' : ''), x + 3 * scale, y);\n }\n\n ctx.restore();\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// `TextNote` is a notation element that is positioned in time. Generally\n// meant for objects that sit above/below the staff and inline with each other.\n// Examples of this would be such as dynamics, lyrics, chord changes, etc.\n\nimport { Vex } from './vex';\nimport { Note } from './note';\nimport { Glyph } from './glyph';\n\nexport class TextNote extends Note {\n static get Justification() {\n return {\n LEFT: 1,\n CENTER: 2,\n RIGHT: 3,\n };\n }\n\n // Glyph data\n static get GLYPHS() {\n return {\n 'segno': {\n code: 'segno',\n },\n 'tr': {\n code: 'ornamentTrill',\n },\n 'mordent': {\n code: 'ornamentMordent',\n },\n 'mordent_upper': {\n code: 'ornamentShortTrill',\n },\n 'mordent_lower': {\n code: 'ornamentMordent',\n },\n 'f': {\n code: 'dynamicForte',\n },\n 'p': {\n code: 'dynamicPiano',\n },\n 'm': {\n code: 'dynamicMezzo',\n },\n 's': {\n code: 'dynamicSforzando',\n },\n 'z': {\n code: 'dynamicZ',\n },\n 'coda': {\n code: 'coda',\n },\n 'pedal_open': {\n code: 'keyboardPedalPed',\n },\n 'pedal_close': {\n code: 'keyboardPedalUp',\n },\n 'caesura_straight': {\n code: 'caesura',\n },\n 'caesura_curved': {\n code: 'caesuraCurved',\n },\n 'breath': {\n code: 'breathMarkComma',\n },\n 'tick': {\n code: 'breathMarkTick',\n },\n 'turn': {\n code: 'ornamentTurn',\n },\n 'turn_inverted': {\n code: 'ornamentTurnSlash',\n },\n };\n }\n\n constructor(options) {\n super(options);\n this.setAttribute('type', 'TextNote');\n\n // Note properties\n this.text = options.text;\n this.superscript = options.superscript;\n this.subscript = options.subscript;\n this.glyph = null;\n this.font = {\n family: 'Arial',\n size: 12,\n weight: '',\n ...options.font\n };\n\n // Determine and set initial note width. Note that the text width is\n // an approximation and isn't very accurate. The only way to accurately\n // measure the length of text is with `canvasmeasureText()`\n if (options.glyph) {\n const struct = TextNote.GLYPHS[options.glyph];\n if (!struct) throw new Vex.RERR('Invalid glyph type: ' + options.glyph);\n\n this.glyph = new Glyph(struct.code, 40, { category: 'textNote' });\n this.setWidth(this.glyph.getMetrics().width);\n }\n\n this.line = options.line || 0;\n this.smooth = options.smooth || false;\n this.ignore_ticks = options.ignore_ticks || false;\n this.justification = TextNote.Justification.LEFT;\n }\n\n // Set the horizontal justification of the TextNote\n setJustification(just) {\n this.justification = just;\n return this;\n }\n\n // Set the Stave line on which the note should be placed\n setLine(line) {\n this.line = line;\n return this;\n }\n\n // Pre-render formatting\n preFormat() {\n this.checkContext();\n\n if (this.preFormatted) return;\n\n if (this.smooth) {\n this.setWidth(0);\n } else {\n if (this.glyph) {\n // Width already set.\n } else {\n this.context.setFont(this.font.family, this.font.size, this.font.weight);\n this.setWidth(this.context.measureText(this.text).width);\n }\n }\n\n if (this.justification === TextNote.Justification.CENTER) {\n this.leftDisplacedHeadPx = this.width / 2;\n } else if (this.justification === TextNote.Justification.RIGHT) {\n this.leftDisplacedHeadPx = this.width;\n }\n\n // We reposition to the center of the note head\n this.rightDisplacedHeadPx = this.tickContext.getMetrics().glyphPx / 2;\n this.setPreFormatted(true);\n }\n\n // Renders the TextNote\n draw() {\n this.checkContext();\n\n if (!this.stave) {\n throw new Vex.RERR('NoStave', \"Can't draw without a stave.\");\n }\n\n this.setRendered();\n const ctx = this.context;\n\n // Reposition to center of note head\n let x = this.getAbsoluteX() + (this.tickContext.getMetrics().glyphPx / 2);\n\n // Align based on tick-context width.\n const width = this.getWidth();\n\n if (this.justification === TextNote.Justification.CENTER) {\n x -= width / 2;\n } else if (this.justification === TextNote.Justification.RIGHT) {\n x -= width;\n }\n\n let y;\n if (this.glyph) {\n y = this.stave.getYForLine(this.line + -3);\n this.glyph.render(this.context, x, y);\n } else {\n y = this.stave.getYForLine(this.line + -3);\n this.applyStyle(ctx);\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n ctx.fillText(this.text, x, y);\n\n const height = ctx.measureText(this.text).height;\n\n // Write superscript\n if (this.superscript) {\n ctx.setFont(this.font.family, this.font.size / 1.3, this.font.weight);\n ctx.fillText(this.superscript, x + width + 2, y - (height / 2.2));\n }\n\n // Write subscript\n if (this.subscript) {\n ctx.setFont(this.font.family, this.font.size / 1.3, this.font.weight);\n ctx.fillText(this.subscript, x + width + 2, y + (height / 2.2) - 1);\n }\n\n this.restoreStyle(ctx);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\nimport { Vex } from './vex';\nimport { StaveModifier } from './stavemodifier';\nimport { TextNote } from './textnote';\n\nexport class StaveText extends StaveModifier {\n static get CATEGORY() { return 'stavetext'; }\n\n constructor(text, position, options) {\n super();\n this.setAttribute('type', 'StaveText');\n\n this.setWidth(16);\n this.text = text;\n this.position = position;\n this.options = {\n shift_x: 0,\n shift_y: 0,\n justification: TextNote.Justification.CENTER,\n };\n Vex.Merge(this.options, options);\n\n this.font = {\n family: 'times',\n size: 16,\n weight: 'normal',\n };\n }\n\n getCategory() { return StaveText.CATEGORY; }\n setStaveText(text) { this.text = text; return this; }\n setShiftX(x) { this.shift_x = x; return this; }\n setShiftY(y) { this.shift_y = y; return this; }\n\n setFont(font) {\n Vex.Merge(this.font, font);\n }\n\n setText(text) {\n this.text = text;\n }\n\n draw(stave) {\n const ctx = stave.checkContext();\n this.setRendered();\n\n ctx.save();\n ctx.lineWidth = 2;\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n const text_width = ctx.measureText('' + this.text).width;\n\n let x;\n let y;\n const Position = StaveModifier.Position;\n const Justification = TextNote.Justification;\n switch (this.position) {\n case Position.LEFT:\n case Position.RIGHT:\n y = (stave.getYForLine(0) + stave.getBottomLineY()) / 2 + this.options.shift_y;\n if (this.position === Position.LEFT) {\n x = stave.getX() - text_width - 24 + this.options.shift_x;\n } else {\n x = stave.getX() + stave.getWidth() + 24 + this.options.shift_x;\n }\n break;\n case Position.ABOVE:\n case Position.BELOW:\n x = stave.getX() + this.options.shift_x;\n if (this.options.justification === Justification.CENTER) {\n x += stave.getWidth() / 2 - text_width / 2;\n } else if (this.options.justification === Justification.RIGHT) {\n x += stave.getWidth() - text_width;\n }\n\n if (this.position === Position.ABOVE) {\n y = stave.getYForTopText(2) + this.options.shift_y;\n } else {\n y = stave.getYForBottomText(2) + this.options.shift_y;\n }\n break;\n default:\n throw new Vex.RERR('InvalidPosition', 'Value Must be in Modifier.Position.');\n }\n\n ctx.fillText('' + this.text, x, y + 4);\n ctx.restore();\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna Cheppudira 2013.\n// Co-author: Benjamin W. Bohl\n//\n// ## Description\n//\n// This file implements various types of clefs that can be rendered on a stave.\n//\n// See `tests/clef_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { StaveModifier } from './stavemodifier';\nimport { Glyph } from './glyph';\n\n// To enable logging for this class, set `Vex.Flow.Clef.DEBUG` to `true`.\nfunction L(...args) { if (Clef.DEBUG) Vex.L('Vex.Flow.Clef', args); }\n\nexport class Clef extends StaveModifier {\n static get CATEGORY() { return 'clefs'; }\n\n // Every clef name is associated with a glyph code from the font file\n // and a default stave line number.\n static get types() {\n return {\n 'treble': {\n code: 'gClef',\n line: 3,\n },\n 'bass': {\n code: 'fClef',\n line: 1,\n },\n 'alto': {\n code: 'cClef',\n line: 2,\n },\n 'tenor': {\n code: 'cClef',\n line: 1,\n },\n 'percussion': {\n code: 'restMaxima',\n line: 2,\n },\n 'soprano': {\n code: 'cClef',\n line: 4,\n },\n 'mezzo-soprano': {\n code: 'cClef',\n line: 3,\n },\n 'baritone-c': {\n code: 'cClef',\n line: 0,\n },\n 'baritone-f': {\n code: 'fClef',\n line: 2,\n },\n 'subbass': {\n code: 'fClef',\n line: 0,\n },\n 'french': {\n code: 'gClef',\n line: 4,\n },\n 'tab': {\n code: '6stringTabClef',\n },\n };\n }\n\n // Create a new clef. The parameter `clef` must be a key from\n // `Clef.types`.\n constructor(type, size, annotation) {\n super();\n this.setAttribute('type', 'Clef');\n\n this.setPosition(StaveModifier.Position.BEGIN);\n this.setType(type, size, annotation);\n this.setWidth(this.musicFont.lookupMetric(`clef.${this.size}.width`));\n L('Creating clef:', type);\n }\n\n getCategory() { return Clef.CATEGORY; }\n\n setType(type, size, annotation) {\n this.type = type;\n this.clef = Clef.types[type];\n if (size === undefined) {\n this.size = 'default';\n } else {\n this.size = size;\n }\n this.clef.point = this.musicFont.lookupMetric(`clef.${this.size}.point`, 0);\n this.glyph = new Glyph(this.clef.code, this.clef.point, {\n category: `clef.${this.clef.code}.${this.size}`\n });\n\n // If an annotation, such as 8va, is specified, add it to the Clef object.\n if (annotation !== undefined) {\n const code = this.musicFont.lookupMetric(`clef.annotations.${annotation}.smuflCode`);\n const point = this.musicFont.lookupMetric(`clef.annotations.${annotation}.${this.size}.point`);\n const line = this.musicFont.lookupMetric(`clef.annotations.${annotation}.${this.size}.${this.type}.line`);\n const x_shift = this.musicFont.lookupMetric(`clef.annotations.${annotation}.${this.size}.${this.type}.shiftX`);\n\n this.annotation = { code, point, line, x_shift };\n\n this.attachment = new Glyph(this.annotation.code, this.annotation.point);\n this.attachment.metrics.x_max = 0;\n this.attachment.setXShift(this.annotation.x_shift);\n } else {\n this.annotation = undefined;\n }\n\n return this;\n }\n\n getWidth() {\n if (this.type === 'tab' && !this.stave) {\n throw new Vex.RERR('ClefError', \"Can't get width without stave.\");\n }\n\n return this.width;\n }\n\n setStave(stave) {\n this.stave = stave;\n if (this.type !== 'tab') return this;\n\n const numLines = this.stave.getOptions().num_lines;\n const point = this.musicFont.lookupMetric(`clef.lineCount.${numLines}.point`);\n const shiftY = this.musicFont.lookupMetric(`clef.lineCount.${numLines}.shiftY`);\n this.glyph.setPoint(point);\n this.glyph.setYShift(shiftY);\n\n return this;\n }\n\n draw() {\n if (!this.x) throw new Vex.RERR('ClefError', \"Can't draw clef without x.\");\n if (!this.stave) throw new Vex.RERR('ClefError', \"Can't draw clef without stave.\");\n this.setRendered();\n\n this.glyph.setStave(this.stave);\n this.glyph.setContext(this.stave.context);\n if (this.clef.line !== undefined) {\n this.placeGlyphOnLine(this.glyph, this.stave, this.clef.line);\n }\n\n this.glyph.renderToStave(this.x);\n\n if (this.annotation !== undefined) {\n this.placeGlyphOnLine(this.attachment, this.stave, this.annotation.line);\n this.attachment.setStave(this.stave);\n this.attachment.setContext(this.stave.context);\n this.attachment.renderToStave(this.x);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implements key signatures. A key signature sits on a stave\n// and indicates the notes with implicit accidentals.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { StaveModifier } from './stavemodifier';\nimport { Glyph } from './glyph';\n\nexport class KeySignature extends StaveModifier {\n static get CATEGORY() { return 'keysignatures'; }\n\n // Space between natural and following accidental depending\n // on vertical position\n static get accidentalSpacing() {\n return {\n '#': {\n above: 6,\n below: 4,\n },\n 'b': {\n above: 4,\n below: 7,\n },\n 'n': {\n above: 4,\n below: 1,\n },\n '##': {\n above: 6,\n below: 4,\n },\n 'bb': {\n above: 4,\n below: 7,\n },\n 'db': {\n above: 4,\n below: 7,\n },\n 'd': {\n above: 4,\n below: 7,\n },\n 'bbs': {\n above: 4,\n below: 7,\n },\n '++': {\n above: 6,\n below: 4,\n },\n '+': {\n above: 6,\n below: 4,\n },\n '+-': {\n above: 6,\n below: 4,\n },\n '++-': {\n above: 6,\n below: 4,\n },\n 'bs': {\n above: 4,\n below: 10,\n },\n 'bss': {\n above: 4,\n below: 10,\n },\n };\n }\n\n // Create a new Key Signature based on a `key_spec`\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super();\n this.setAttribute('type', 'KeySignature');\n\n this.setKeySig(keySpec, cancelKeySpec, alterKeySpec);\n this.setPosition(StaveModifier.Position.BEGIN);\n this.glyphFontScale = 38; // TODO(0xFE): Should this match StaveNote?\n this.glyphs = [];\n this.xPositions = []; // relative to this.x\n this.paddingForced = false;\n }\n\n getCategory() { return KeySignature.CATEGORY; }\n\n // Add an accidental glyph to the `KeySignature` instance which represents\n // the provided `acc`. If `nextAcc` is also provided, the appropriate\n // spacing will be included in the glyph's position\n convertToGlyph(acc, nextAcc) {\n const accGlyphData = Flow.accidentalCodes(acc.type);\n const glyph = new Glyph(accGlyphData.code, this.glyphFontScale);\n\n // Determine spacing between current accidental and the next accidental\n let extraWidth = 1;\n if (acc.type === 'n' && nextAcc) {\n const spacing = KeySignature.accidentalSpacing[nextAcc.type];\n if (spacing) {\n const isAbove = nextAcc.line >= acc.line;\n extraWidth = isAbove ? spacing.above : spacing.below;\n }\n }\n\n // Place the glyph on the stave\n this.placeGlyphOnLine(glyph, this.stave, acc.line);\n this.glyphs.push(glyph);\n\n const xPosition = this.xPositions[this.xPositions.length - 1];\n const glyphWidth = glyph.getMetrics().width + extraWidth;\n // Store the next accidental's x position\n this.xPositions.push(xPosition + glyphWidth);\n // Expand size of key signature\n this.width += glyphWidth;\n }\n\n // Cancel out a key signature provided in the `spec` parameter. This will\n // place appropriate natural accidentals before the key signature.\n cancelKey(spec) {\n this.formatted = false;\n this.cancelKeySpec = spec;\n\n return this;\n }\n\n convertToCancelAccList(spec) {\n // Get the accidental list for the cancelled key signature\n const cancel_accList = Flow.keySignature(spec);\n\n // If the cancelled key has a different accidental type, ie: # vs b\n const different_types = this.accList.length > 0\n && cancel_accList.length > 0\n && cancel_accList[0].type !== this.accList[0].type;\n\n // Determine how many naturals needed to add\n const naturals = different_types\n ? cancel_accList.length\n : cancel_accList.length - this.accList.length;\n\n // Return if no naturals needed\n if (naturals < 1) return undefined;\n\n // Get the line position for each natural\n const cancelled = [];\n for (let i = 0; i < naturals; i++) {\n let index = i;\n if (!different_types) {\n index = cancel_accList.length - naturals + i;\n }\n\n const acc = cancel_accList[index];\n cancelled.push({ type: 'n', line: acc.line });\n }\n\n // Combine naturals with main accidental list for the key signature\n this.accList = cancelled.concat(this.accList);\n\n return {\n accList: cancelled,\n type: cancel_accList[0].type\n };\n }\n\n // Deprecated\n addToStave(stave) {\n this.paddingForced = true;\n stave.addModifier(this);\n\n return this;\n }\n\n // Apply the accidental staff line placement based on the `clef` and\n // the accidental `type` for the key signature ('# or 'b').\n convertAccLines(clef, type, accList = this.accList) {\n let offset = 0.0; // if clef === \"treble\"\n let customLines; // when clef doesn't follow treble key sig shape\n\n switch (clef) {\n // Treble & Subbass both have offsets of 0, so are not included.\n case 'soprano':\n if (type === '#') customLines = [2.5, 0.5, 2, 0, 1.5, -0.5, 1];\n else offset = -1;\n break;\n case 'mezzo-soprano':\n if (type === 'b') customLines = [0, 2, 0.5, 2.5, 1, 3, 1.5];\n else offset = 1.5;\n break;\n case 'alto':\n offset = 0.5;\n break;\n case 'tenor':\n if (type === '#') customLines = [3, 1, 2.5, 0.5, 2, 0, 1.5];\n else offset = -0.5;\n break;\n case 'baritone-f':\n case 'baritone-c':\n if (type === 'b') customLines = [0.5, 2.5, 1, 3, 1.5, 3.5, 2];\n else offset = 2;\n break;\n case 'bass':\n case 'french':\n offset = 1;\n break;\n default:\n break;\n }\n\n // If there's a special case, assign those lines/spaces:\n let i;\n if (typeof customLines !== 'undefined') {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line = customLines[i];\n }\n } else if (offset !== 0) {\n for (i = 0; i < accList.length; ++i) {\n accList[i].line += offset;\n }\n }\n }\n\n getPadding(index) {\n if (!this.formatted) this.format();\n\n return (\n this.glyphs.length === 0 || (!this.paddingForced && index < 2) ?\n 0 : this.padding\n );\n }\n\n getWidth() {\n if (!this.formatted) this.format();\n\n return this.width;\n }\n\n setKeySig(keySpec, cancelKeySpec, alterKeySpec) {\n this.formatted = false;\n this.keySpec = keySpec;\n this.cancelKeySpec = cancelKeySpec;\n this.alterKeySpec = alterKeySpec;\n\n return this;\n }\n\n // Alter the accidentals of a key spec one by one.\n // Each alteration is a new accidental that replaces the\n // original accidental (or the canceled one).\n alterKey(alterKeySpec) {\n this.formatted = false;\n this.alterKeySpec = alterKeySpec;\n\n return this;\n }\n\n convertToAlterAccList(alterKeySpec) {\n const max = Math.min(alterKeySpec.length, this.accList.length);\n for (let i = 0; i < max; ++i) {\n if (alterKeySpec[i]) {\n this.accList[i].type = alterKeySpec[i];\n }\n }\n }\n\n format() {\n if (!this.stave) {\n throw new Vex.RERR('KeySignatureError', \"Can't draw key signature without stave.\");\n }\n\n this.width = 0;\n this.glyphs = [];\n this.xPositions = [0]; // initialize with initial x position\n this.accList = Flow.keySignature(this.keySpec);\n const accList = this.accList;\n const firstAccidentalType = accList.length > 0 ? accList[0].type : null;\n let cancelAccList;\n if (this.cancelKeySpec) {\n cancelAccList = this.convertToCancelAccList(this.cancelKeySpec);\n }\n if (this.alterKeySpec) {\n this.convertToAlterAccList(this.alterKeySpec);\n }\n\n if (this.accList.length > 0) {\n const clef = ((this.position === StaveModifier.Position.END) ?\n this.stave.endClef : this.stave.clef) || this.stave.clef;\n if (cancelAccList) {\n this.convertAccLines(clef, cancelAccList.type, cancelAccList.accList);\n }\n this.convertAccLines(clef, firstAccidentalType, accList);\n for (let i = 0; i < this.accList.length; ++i) {\n this.convertToGlyph(this.accList[i], this.accList[i + 1]);\n }\n }\n\n this.formatted = true;\n }\n\n draw() {\n if (!this.x) {\n throw new Vex.RERR('KeySignatureError', \"Can't draw key signature without x.\");\n }\n\n if (!this.stave) {\n throw new Vex.RERR('KeySignatureError', \"Can't draw key signature without stave.\");\n }\n\n if (!this.formatted) this.format();\n this.setRendered();\n\n for (let i = 0; i < this.glyphs.length; i++) {\n const glyph = this.glyphs[i];\n const x = this.x + this.xPositions[i];\n glyph.setStave(this.stave);\n glyph.setContext(this.stave.context);\n glyph.renderToStave(x);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// Implements time signatures glyphs for staffs\n// See tables.js for the internal time signatures\n// representation\n\nimport { Vex } from './vex';\nimport { Glyph } from './glyph';\nimport { StaveModifier } from './stavemodifier';\n\nconst assertIsValidFraction = (timeSpec) => {\n const numbers = timeSpec.split('/').filter(number => number !== '');\n\n if (numbers.length !== 2) {\n throw new Vex.RERR(\n 'BadTimeSignature',\n `Invalid time spec: ${timeSpec}. Must be in the form \"/\"`\n );\n }\n\n numbers.forEach(number => {\n if (isNaN(Number(number))) {\n throw new Vex.RERR(\n 'BadTimeSignature', `Invalid time spec: ${timeSpec}. Must contain two valid numbers.`\n );\n }\n });\n};\n\nexport class TimeSignature extends StaveModifier {\n static get CATEGORY() { return 'timesignatures'; }\n\n static get glyphs() {\n return {\n 'C': {\n code: 'timeSigCommon',\n point: 40,\n line: 2,\n },\n 'C|': {\n code: 'timeSigCutCommon',\n point: 40,\n line: 2,\n },\n };\n }\n\n constructor(timeSpec = null, customPadding = 15, validate_args = true) {\n super();\n this.setAttribute('type', 'TimeSignature');\n this.validate_args = validate_args;\n\n if (timeSpec === null) return;\n\n const padding = customPadding;\n\n this.point = this.musicFont.lookupMetric('digits.point');\n const fontLineShift = this.musicFont.lookupMetric('digits.shiftLine', 0);\n this.topLine = 2 + fontLineShift;\n this.bottomLine = 4 + fontLineShift;\n this.setPosition(StaveModifier.Position.BEGIN);\n this.setTimeSig(timeSpec);\n this.setWidth(this.timeSig.glyph.getMetrics().width);\n this.setPadding(padding);\n }\n\n getCategory() { return TimeSignature.CATEGORY; }\n\n parseTimeSpec(timeSpec) {\n if (timeSpec === 'C' || timeSpec === 'C|') {\n const { line, code, point } = TimeSignature.glyphs[timeSpec];\n return {\n line,\n num: false,\n glyph: new Glyph(code, point),\n };\n }\n\n if (this.validate_args) {\n assertIsValidFraction(timeSpec);\n }\n\n const [topDigits, botDigits] = timeSpec\n .split('/')\n .map(number => number.split(''));\n\n return {\n num: true,\n glyph: this.makeTimeSignatureGlyph(topDigits, botDigits),\n };\n }\n\n makeTimeSignatureGlyph(topDigits, botDigits) {\n const glyph = new Glyph('timeSig0', this.point);\n glyph.topGlyphs = [];\n glyph.botGlyphs = [];\n\n let topWidth = 0;\n for (let i = 0; i < topDigits.length; ++i) {\n const num = topDigits[i];\n const topGlyph = new Glyph('timeSig' + num, this.point);\n\n glyph.topGlyphs.push(topGlyph);\n topWidth += topGlyph.getMetrics().width;\n }\n\n let botWidth = 0;\n for (let i = 0; i < botDigits.length; ++i) {\n const num = botDigits[i];\n const botGlyph = new Glyph('timeSig' + num, this.point);\n\n glyph.botGlyphs.push(botGlyph);\n botWidth += botGlyph.getMetrics().width;\n }\n\n const width = topWidth > botWidth ? topWidth : botWidth;\n const xMin = glyph.getMetrics().x_min;\n\n glyph.getMetrics = () => ({\n x_min: xMin,\n x_max: xMin + width,\n width,\n });\n\n const topStartX = (width - topWidth) / 2.0;\n const botStartX = (width - botWidth) / 2.0;\n\n const that = this;\n glyph.renderToStave = function renderToStave(x) {\n let start_x = x + topStartX;\n for (let i = 0; i < this.topGlyphs.length; ++i) {\n const glyph = this.topGlyphs[i];\n Glyph.renderOutline(\n this.context,\n glyph.metrics.outline,\n glyph.scale,\n start_x + glyph.x_shift,\n this.stave.getYForLine(that.topLine)\n );\n start_x += glyph.getMetrics().width;\n }\n\n start_x = x + botStartX;\n for (let i = 0; i < this.botGlyphs.length; ++i) {\n const glyph = this.botGlyphs[i];\n that.placeGlyphOnLine(glyph, this.stave, glyph.line);\n Glyph.renderOutline(\n this.context,\n glyph.metrics.outline,\n glyph.scale,\n start_x + glyph.x_shift,\n this.stave.getYForLine(that.bottomLine)\n );\n start_x += glyph.getMetrics().width;\n }\n };\n\n return glyph;\n }\n\n getTimeSig() {\n return this.timeSig;\n }\n\n setTimeSig(timeSpec) {\n this.timeSig = this.parseTimeSpec(timeSpec);\n return this;\n }\n\n draw() {\n if (!this.x) {\n throw new Vex.RERR('TimeSignatureError', \"Can't draw time signature without x.\");\n }\n\n if (!this.stave) {\n throw new Vex.RERR('TimeSignatureError', \"Can't draw time signature without stave.\");\n }\n\n this.setRendered();\n this.timeSig.glyph.setStave(this.stave);\n this.timeSig.glyph.setContext(this.stave.context);\n this.placeGlyphOnLine(this.timeSig.glyph, this.stave, this.timeSig.line);\n this.timeSig.glyph.renderToStave(this.x);\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Larry Kuhns 2011\n\nimport { StaveModifier } from './stavemodifier';\n\nexport class Volta extends StaveModifier {\n static get CATEGORY() { return 'voltas'; }\n static get type() {\n return {\n NONE: 1,\n BEGIN: 2,\n MID: 3,\n END: 4,\n BEGIN_END: 5,\n };\n }\n\n constructor(type, number, x, y_shift) {\n super();\n this.setAttribute('type', 'Volta');\n this.volta = type;\n this.x = x;\n this.y_shift = y_shift;\n this.number = number;\n this.font = {\n family: 'sans-serif',\n size: 9,\n weight: 'bold',\n };\n }\n\n getCategory() { return Volta.CATEGORY; }\n setShiftY(y) { this.y_shift = y; return this; }\n\n draw(stave, x) {\n const ctx = stave.checkContext();\n this.setRendered();\n\n let width = stave.width;\n const top_y = stave.getYForTopText(stave.options.num_lines) + this.y_shift;\n const vert_height = 1.5 * stave.options.spacing_between_lines_px;\n switch (this.volta) {\n case Volta.type.BEGIN:\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n break;\n case Volta.type.END:\n width -= 5;\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n case Volta.type.BEGIN_END:\n width -= 3;\n ctx.fillRect(this.x + x, top_y, 1, vert_height);\n ctx.fillRect(this.x + x + width, top_y, 1, vert_height);\n break;\n default:\n break;\n }\n // If the beginning of a volta, draw measure number\n if (this.volta === Volta.type.BEGIN || this.volta === Volta.type.BEGIN_END) {\n ctx.save();\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n ctx.fillText(this.number, this.x + x + 5, top_y + 15);\n ctx.restore();\n }\n\n ctx.fillRect(this.x + x, top_y, width, 1);\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Flow } from './tables';\nimport { Barline } from './stavebarline';\nimport { StaveModifier } from './stavemodifier';\nimport { Repetition } from './staverepetition';\nimport { StaveSection } from './stavesection';\nimport { StaveTempo } from './stavetempo';\nimport { StaveText } from './stavetext';\nimport { BoundingBox } from './boundingbox';\nimport { Clef } from './clef';\nimport { KeySignature } from './keysignature';\nimport { TimeSignature } from './timesignature';\nimport { Volta } from './stavevolta';\n\nexport class Stave extends Element {\n constructor(x, y, width, options) {\n super();\n this.setAttribute('type', 'Stave');\n\n this.x = x;\n this.y = y;\n this.width = width;\n this.formatted = false;\n this.start_x = x + 5;\n this.end_x = x + width;\n this.modifiers = []; // stave modifiers (clef, key, time, barlines, coda, segno, etc.)\n this.measure = 0;\n this.clef = 'treble';\n this.endClef = undefined;\n this.font = {\n family: 'sans-serif',\n size: 8,\n weight: '',\n };\n this.options = {\n vertical_bar_width: 10, // Width around vertical bar end-marker\n glyph_spacing_px: 10,\n num_lines: 5,\n fill_style: '#999999',\n left_bar: true, // draw vertical bar on left\n right_bar: true, // draw vertical bar on right\n spacing_between_lines_px: 10, // in pixels\n space_above_staff_ln: 4, // in staff lines\n space_below_staff_ln: 4, // in staff lines\n top_text_position: 1, // in staff lines\n };\n this.bounds = { x: this.x, y: this.y, w: this.width, h: 0 };\n Vex.Merge(this.options, options);\n\n this.resetLines();\n\n const BARTYPE = Barline.type;\n // beg bar\n this.addModifier(new Barline(this.options.left_bar ? BARTYPE.SINGLE : BARTYPE.NONE));\n // end bar\n this.addEndModifier(new Barline(this.options.right_bar ? BARTYPE.SINGLE : BARTYPE.NONE));\n }\n\n space(spacing) { return this.options.spacing_between_lines_px * spacing; }\n\n resetLines() {\n this.options.line_config = [];\n for (let i = 0; i < this.options.num_lines; i++) {\n this.options.line_config.push({ visible: true });\n }\n this.height = (this.options.num_lines + this.options.space_above_staff_ln) *\n this.options.spacing_between_lines_px;\n this.options.bottom_text_position = this.options.num_lines;\n }\n\n getOptions() { return this.options; }\n\n setNoteStartX(x) {\n if (!this.formatted) this.format();\n\n this.start_x = x;\n const begBarline = this.modifiers[0];\n begBarline.setX(this.start_x - begBarline.getWidth());\n return this;\n }\n getNoteStartX() {\n if (!this.formatted) this.format();\n\n return this.start_x;\n }\n\n getNoteEndX() {\n if (!this.formatted) this.format();\n\n return this.end_x;\n }\n getTieStartX() { return this.start_x; }\n getTieEndX() { return this.x + this.width; }\n getX() { return this.x; }\n getNumLines() { return this.options.num_lines; }\n setNumLines(lines) {\n this.options.num_lines = parseInt(lines, 10);\n this.resetLines();\n return this;\n }\n setY(y) { this.y = y; return this; }\n\n getTopLineTopY() {\n return this.getYForLine(0) - (Flow.STAVE_LINE_THICKNESS / 2);\n }\n getBottomLineBottomY() {\n return this.getYForLine(this.getNumLines() - 1) + (Flow.STAVE_LINE_THICKNESS / 2);\n }\n\n setX(x) {\n const shift = x - this.x;\n this.formatted = false;\n this.x = x;\n this.start_x += shift;\n this.end_x += shift;\n for (let i = 0; i < this.modifiers.length; i++) {\n const mod = this.modifiers[i];\n if (mod.x !== undefined) {\n mod.x += shift;\n }\n }\n return this;\n }\n\n setWidth(width) {\n this.formatted = false;\n this.width = width;\n this.end_x = this.x + width;\n\n // reset the x position of the end barline (TODO(0xfe): This makes no sense)\n // this.modifiers[1].setX(this.end_x);\n return this;\n }\n\n getWidth() {\n return this.width;\n }\n\n getStyle() {\n return {\n fillStyle: this.options.fill_style,\n strokeStyle: this.options.fill_style, // yes, this is correct for legacy compatibility\n lineWidth: Flow.STAVE_LINE_THICKNESS, ...this.style || {}\n };\n }\n\n setMeasure(measure) { this.measure = measure; return this; }\n\n /**\n * Gets the pixels to shift from the beginning of the stave\n * following the modifier at the provided index\n * @param {Number} index The index from which to determine the shift\n * @return {Number} The amount of pixels shifted\n */\n getModifierXShift(index = 0) {\n if (typeof index !== 'number') {\n throw new Vex.RERR('InvalidIndex', 'Must be of number type');\n }\n\n if (!this.formatted) this.format();\n\n if (this.getModifiers(StaveModifier.Position.BEGIN).length === 1) {\n return 0;\n }\n\n let start_x = this.start_x - this.x;\n const begBarline = this.modifiers[0];\n if (begBarline.getType() === Barline.type.REPEAT_BEGIN && start_x > begBarline.getWidth()) {\n start_x -= begBarline.getWidth();\n }\n\n return start_x;\n }\n\n // Coda & Segno Symbol functions\n setRepetitionTypeLeft(type, y) {\n this.modifiers.push(new Repetition(type, this.x, y));\n return this;\n }\n\n setRepetitionTypeRight(type, y) {\n this.modifiers.push(new Repetition(type, this.x, y));\n return this;\n }\n\n // Volta functions\n setVoltaType(type, number_t, y) {\n this.modifiers.push(new Volta(type, number_t, this.x, y));\n return this;\n }\n\n // Section functions\n setSection(section, y) {\n this.modifiers.push(new StaveSection(section, this.x, y));\n return this;\n }\n\n // Tempo functions\n setTempo(tempo, y) {\n this.modifiers.push(new StaveTempo(tempo, this.x, y));\n return this;\n }\n\n // Text functions\n setText(text, position, options) {\n this.modifiers.push(new StaveText(text, position, options));\n return this;\n }\n\n getHeight() {\n return this.height;\n }\n\n getSpacingBetweenLines() {\n return this.options.spacing_between_lines_px;\n }\n\n getBoundingBox() {\n return new BoundingBox(this.x, this.y, this.width, this.getBottomY() - this.y);\n }\n\n getBottomY() {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const score_bottom = this.getYForLine(options.num_lines) +\n (options.space_below_staff_ln * spacing);\n\n return score_bottom;\n }\n\n getBottomLineY() {\n return this.getYForLine(this.options.num_lines);\n }\n\n // This returns the y for the *center* of a staff line\n getYForLine(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n\n const y = this.y + (line * spacing) + (headroom * spacing);\n\n return y;\n }\n\n getLineForY(y) {\n // Does the reverse of getYForLine - somewhat dumb and just calls\n // getYForLine until the right value is reaches\n\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n return ((y - this.y) / spacing) - headroom;\n }\n\n getYForTopText(line) {\n const l = line || 0;\n return this.getYForLine(-l - this.options.top_text_position);\n }\n\n getYForBottomText(line) {\n const l = line || 0;\n return this.getYForLine(this.options.bottom_text_position + l);\n }\n\n getYForNote(line) {\n const options = this.options;\n const spacing = options.spacing_between_lines_px;\n const headroom = options.space_above_staff_ln;\n const y = this.y + (headroom * spacing) + (5 * spacing) - (line * spacing);\n\n return y;\n }\n\n getYForGlyphs() {\n return this.getYForLine(3);\n }\n\n // This method adds a stave modifier to the stave. Note that the first two\n // modifiers (BarLines) are automatically added upon construction.\n addModifier(modifier, position) {\n if (position !== undefined) {\n modifier.setPosition(position);\n }\n\n modifier.setStave(this);\n this.formatted = false;\n this.modifiers.push(modifier);\n return this;\n }\n\n addEndModifier(modifier) {\n this.addModifier(modifier, StaveModifier.Position.END);\n return this;\n }\n\n // Bar Line functions\n setBegBarType(type) {\n // Only valid bar types at beginning of stave is none, single or begin repeat\n const { SINGLE, REPEAT_BEGIN, NONE } = Barline.type;\n if (type === SINGLE || type === REPEAT_BEGIN || type === NONE) {\n this.modifiers[0].setType(type);\n this.formatted = false;\n }\n return this;\n }\n\n setEndBarType(type) {\n // Repeat end not valid at end of stave\n if (type !== Barline.type.REPEAT_BEGIN) {\n this.modifiers[1].setType(type);\n this.formatted = false;\n }\n return this;\n }\n\n setClef(clefSpec, size, annotation, position) {\n if (position === undefined) {\n position = StaveModifier.Position.BEGIN;\n }\n\n if (position === StaveModifier.Position.END) {\n this.endClef = clefSpec;\n } else {\n this.clef = clefSpec;\n }\n\n const clefs = this.getModifiers(position, Clef.CATEGORY);\n if (clefs.length === 0) {\n this.addClef(clefSpec, size, annotation, position);\n } else {\n clefs[0].setType(clefSpec, size, annotation);\n }\n\n return this;\n }\n\n setEndClef(clefSpec, size, annotation) {\n this.setClef(clefSpec, size, annotation, StaveModifier.Position.END);\n return this;\n }\n\n setKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifier.Position.BEGIN;\n }\n\n const keySignatures = this.getModifiers(position, KeySignature.CATEGORY);\n if (keySignatures.length === 0) {\n this.addKeySignature(keySpec, cancelKeySpec, position);\n } else {\n keySignatures[0].setKeySig(keySpec, cancelKeySpec);\n }\n\n return this;\n }\n\n setEndKeySignature(keySpec, cancelKeySpec) {\n this.setKeySignature(keySpec, cancelKeySpec, StaveModifier.Position.END);\n return this;\n }\n\n setTimeSignature(timeSpec, customPadding, position) {\n if (position === undefined) {\n position = StaveModifier.Position.BEGIN;\n }\n\n const timeSignatures = this.getModifiers(position, TimeSignature.CATEGORY);\n if (timeSignatures.length === 0) {\n this.addTimeSignature(timeSpec, customPadding, position);\n } else {\n timeSignatures[0].setTimeSig(timeSpec);\n }\n\n return this;\n }\n\n setEndTimeSignature(timeSpec, customPadding) {\n this.setTimeSignature(timeSpec, customPadding, StaveModifier.Position.END);\n return this;\n }\n\n addKeySignature(keySpec, cancelKeySpec, position) {\n if (position === undefined) {\n position = StaveModifier.Position.BEGIN;\n }\n this.addModifier(new KeySignature(keySpec, cancelKeySpec)\n .setPosition(position), position);\n return this;\n }\n\n addClef(clef, size, annotation, position) {\n if (position === undefined || position === StaveModifier.Position.BEGIN) {\n this.clef = clef;\n } else if (position === StaveModifier.Position.END) {\n this.endClef = clef;\n }\n\n this.addModifier(new Clef(clef, size, annotation), position);\n return this;\n }\n\n addEndClef(clef, size, annotation) {\n this.addClef(clef, size, annotation, StaveModifier.Position.END);\n return this;\n }\n\n addTimeSignature(timeSpec, customPadding, position) {\n this.addModifier(new TimeSignature(timeSpec, customPadding), position);\n return this;\n }\n\n addEndTimeSignature(timeSpec, customPadding) {\n this.addTimeSignature(timeSpec, customPadding, StaveModifier.Position.END);\n return this;\n }\n\n // Deprecated\n addTrebleGlyph() {\n this.addClef('treble');\n return this;\n }\n\n getModifiers(position, category) {\n if (position === undefined && category === undefined) return this.modifiers;\n\n return this.modifiers.filter(modifier =>\n (position === undefined || position === modifier.getPosition()) &&\n (category === undefined || category === modifier.getCategory())\n );\n }\n\n sortByCategory(items, order) {\n for (let i = items.length - 1; i >= 0; i--) {\n for (let j = 0; j < i; j++) {\n if (order[items[j].getCategory()] > order[items[j + 1].getCategory()]) {\n const temp = items[j];\n items[j] = items[j + 1];\n items[j + 1] = temp;\n }\n }\n }\n }\n\n format() {\n const begBarline = this.modifiers[0];\n const endBarline = this.modifiers[1];\n\n const begModifiers = this.getModifiers(StaveModifier.Position.BEGIN);\n const endModifiers = this.getModifiers(StaveModifier.Position.END);\n\n this.sortByCategory(begModifiers, {\n barlines: 0, clefs: 1, keysignatures: 2, timesignatures: 3,\n });\n\n this.sortByCategory(endModifiers, {\n timesignatures: 0, keysignatures: 1, barlines: 2, clefs: 3,\n });\n\n if (begModifiers.length > 1 &&\n begBarline.getType() === Barline.type.REPEAT_BEGIN) {\n begModifiers.push(begModifiers.splice(0, 1)[0]);\n begModifiers.splice(0, 0, new Barline(Barline.type.SINGLE));\n }\n\n if (endModifiers.indexOf(endBarline) > 0) {\n endModifiers.splice(0, 0, new Barline(Barline.type.NONE));\n }\n\n let width;\n let padding;\n let modifier;\n let offset = 0;\n let x = this.x;\n for (let i = 0; i < begModifiers.length; i++) {\n modifier = begModifiers[i];\n padding = modifier.getPadding(i + offset);\n width = modifier.getWidth();\n\n x += padding;\n modifier.setX(x);\n x += width;\n\n if (padding + width === 0) offset--;\n }\n\n this.start_x = x;\n x = this.x + this.width;\n\n const widths = {\n left: 0,\n right: 0,\n paddingRight: 0,\n paddingLeft: 0,\n };\n\n let lastBarlineIdx = 0;\n\n for (let i = 0; i < endModifiers.length; i++) {\n modifier = endModifiers[i];\n lastBarlineIdx = (modifier.getCategory() === 'barlines') ? i : lastBarlineIdx;\n\n widths.right = 0;\n widths.left = 0;\n widths.paddingRight = 0;\n widths.paddingLeft = 0;\n const layoutMetrics = modifier.getLayoutMetrics();\n\n if (layoutMetrics) {\n if (i !== 0) {\n widths.right = layoutMetrics.xMax || 0;\n widths.paddingRight = layoutMetrics.paddingRight || 0;\n }\n widths.left = (-layoutMetrics.xMin) || 0;\n widths.paddingLeft = layoutMetrics.paddingLeft || 0;\n\n if (i === endModifiers.length - 1) {\n widths.paddingLeft = 0;\n }\n } else {\n widths.paddingRight = modifier.getPadding(i - lastBarlineIdx);\n if (i !== 0) {\n widths.right = modifier.getWidth();\n }\n if (i === 0) {\n widths.left = modifier.getWidth();\n }\n }\n x -= widths.paddingRight;\n x -= widths.right;\n\n modifier.setX(x);\n\n x -= widths.left;\n x -= widths.paddingLeft;\n }\n\n this.end_x = endModifiers.length === 1 ? this.x + this.width : x;\n this.formatted = true;\n }\n\n /**\n * All drawing functions below need the context to be set.\n */\n draw() {\n this.checkContext();\n this.setRendered();\n\n if (!this.formatted) this.format();\n\n const num_lines = this.options.num_lines;\n const width = this.width;\n const x = this.x;\n let y;\n\n // Render lines\n for (let line = 0; line < num_lines; line++) {\n y = this.getYForLine(line);\n\n this.applyStyle();\n if (this.options.line_config[line].visible) {\n this.context.beginPath();\n this.context.moveTo(x, y);\n this.context.lineTo(x + width, y);\n this.context.stroke();\n }\n this.restoreStyle();\n }\n\n // Draw the modifiers (bar lines, coda, segno, repeat brackets, etc.)\n for (let i = 0; i < this.modifiers.length; i++) {\n // Only draw modifier if it has a draw function\n if (typeof this.modifiers[i].draw === 'function') {\n this.modifiers[i].applyStyle(this.context);\n this.modifiers[i].draw(this, this.getModifierXShift(i));\n this.modifiers[i].restoreStyle(this.context);\n }\n }\n\n // Render measure numbers\n if (this.measure > 0) {\n this.context.save();\n this.context.setFont(this.font.family, this.font.size, this.font.weight);\n const text_width = this.context.measureText('' + this.measure).width;\n y = this.getYForTopText(0) + 3;\n this.context.fillText('' + this.measure, this.x - text_width / 2, y);\n this.context.restore();\n }\n\n return this;\n }\n\n // Draw Simple barlines for backward compatability\n // Do not delete - draws the beginning bar of the stave\n drawVertical(x, isDouble) {\n this.drawVerticalFixed(this.x + x, isDouble);\n }\n\n drawVerticalFixed(x, isDouble) {\n this.checkContext();\n\n const top_line = this.getYForLine(0);\n const bottom_line = this.getYForLine(this.options.num_lines - 1);\n if (isDouble) {\n this.context.fillRect(x - 3, top_line, 1, bottom_line - top_line + 1);\n }\n this.context.fillRect(x, top_line, 1, bottom_line - top_line + 1);\n }\n\n drawVerticalBar(x) {\n this.drawVerticalBarFixed(this.x + x, false);\n }\n\n drawVerticalBarFixed(x) {\n this.checkContext();\n\n const top_line = this.getYForLine(0);\n const bottom_line = this.getYForLine(this.options.num_lines - 1);\n this.context.fillRect(x, top_line, 1, bottom_line - top_line + 1);\n }\n\n /**\n * Get the current configuration for the Stave.\n * @return {Array} An array of configuration objects.\n */\n getConfigForLines() {\n return this.options.line_config;\n }\n\n /**\n * Configure properties of the lines in the Stave\n * @param line_number The index of the line to configure.\n * @param line_config An configuration object for the specified line.\n * @throws Vex.RERR \"StaveConfigError\" When the specified line number is out of\n * range of the number of lines specified in the constructor.\n */\n setConfigForLine(line_number, line_config) {\n if (line_number >= this.options.num_lines || line_number < 0) {\n throw new Vex.RERR(\n 'StaveConfigError',\n 'The line number must be within the range of the number of lines in the Stave.'\n );\n }\n\n if (line_config.visible === undefined) {\n throw new Vex.RERR(\n 'StaveConfigError',\n \"The line configuration object is missing the 'visible' property.\"\n );\n }\n\n if (typeof (line_config.visible) !== 'boolean') {\n throw new Vex.RERR(\n 'StaveConfigError',\n \"The line configuration objects 'visible' property must be true or false.\"\n );\n }\n\n this.options.line_config[line_number] = line_config;\n\n return this;\n }\n\n /**\n * Set the staff line configuration array for all of the lines at once.\n * @param lines_configuration An array of line configuration objects. These objects\n * are of the same format as the single one passed in to setLineConfiguration().\n * The caller can set null for any line config entry if it is desired that the default be used\n * @throws Vex.RERR \"StaveConfigError\" When the lines_configuration array does not have\n * exactly the same number of elements as the num_lines configuration object set in\n * the constructor.\n */\n setConfigForLines(lines_configuration) {\n if (lines_configuration.length !== this.options.num_lines) {\n throw new Vex.RERR(\n 'StaveConfigError',\n 'The length of the lines configuration array must match the number of lines in the Stave'\n );\n }\n\n // Make sure the defaults are present in case an incomplete set of\n // configuration options were supplied.\n // eslint-disable-next-line\n for (const line_config in lines_configuration) {\n // Allow 'null' to be used if the caller just wants the default for a particular node.\n if (!lines_configuration[line_config]) {\n lines_configuration[line_config] = this.options.line_config[line_config];\n }\n Vex.Merge(this.options.line_config[line_config], lines_configuration[line_config]);\n }\n\n this.options.line_config = lines_configuration;\n\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { Vex } from './vex';\nimport { Stave } from './stave';\n\nexport class TabStave extends Stave {\n constructor(x, y, width, options) {\n const tab_options = {\n spacing_between_lines_px: 13,\n num_lines: 6,\n top_text_position: 1,\n };\n\n Vex.Merge(tab_options, options);\n super(x, y, width, tab_options);\n this.setAttribute('type', 'TabStave');\n }\n\n getYForGlyphs() {\n return this.getYForLine(2.5);\n }\n\n // Deprecated\n addTabGlyph() {\n this.addClef('tab');\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// The file implements notes for Tablature notation. This consists of one or\n// more fret positions, and can either be drawn with or without stems.\n//\n// See `tests/tabnote_tests.js` for usage examples\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Modifier } from './modifier';\nimport { Stem } from './stem';\nimport { StemmableNote } from './stemmablenote';\nimport { Dot } from './dot';\nimport { Glyph } from './glyph';\n\n// Gets the unused strings grouped together if consecutive.\n//\n// Parameters:\n// * num_lines - The number of lines\n// * strings_used - An array of numbers representing which strings have fret positions\nfunction getUnusedStringGroups(num_lines, strings_used) {\n const stem_through = [];\n let group = [];\n for (let string = 1; string <= num_lines; string++) {\n const is_used = strings_used.indexOf(string) > -1;\n\n if (!is_used) {\n group.push(string);\n } else {\n stem_through.push(group);\n group = [];\n }\n }\n if (group.length > 0) stem_through.push(group);\n\n return stem_through;\n}\n\n// Gets groups of points that outline the partial stem lines\n// between fret positions\n//\n// Parameters:\n// * stem_Y - The `y` coordinate the stem is located on\n// * unused_strings - An array of groups of unused strings\n// * stave - The stave to use for reference\n// * stem_direction - The direction of the stem\nfunction getPartialStemLines(stem_y, unused_strings, stave, stem_direction) {\n const up_stem = stem_direction !== 1;\n const down_stem = stem_direction !== -1;\n\n const line_spacing = stave.getSpacingBetweenLines();\n const total_lines = stave.getNumLines();\n\n const stem_lines = [];\n\n unused_strings.forEach(strings => {\n const containsLastString = strings.indexOf(total_lines) > -1;\n const containsFirstString = strings.indexOf(1) > -1;\n\n if ((up_stem && containsFirstString) ||\n (down_stem && containsLastString)) {\n return;\n }\n\n // If there's only one string in the group, push a duplicate value.\n // We do this because we need 2 strings to convert into upper/lower y\n // values.\n if (strings.length === 1) {\n strings.push(strings[0]);\n }\n\n const line_ys = [];\n // Iterate through each group string and store it's y position\n strings.forEach((string, index, strings) => {\n const isTopBound = string === 1;\n const isBottomBound = string === total_lines;\n\n // Get the y value for the appropriate staff line,\n // we adjust for a 0 index array, since string numbers are index 1\n let y = stave.getYForLine(string - 1);\n\n // Unless the string is the first or last, add padding to each side\n // of the line\n if (index === 0 && !isTopBound) {\n y -= line_spacing / 2 - 1;\n } else if (index === strings.length - 1 && !isBottomBound) {\n y += line_spacing / 2 - 1;\n }\n\n // Store the y value\n line_ys.push(y);\n\n // Store a subsequent y value connecting this group to the main\n // stem above/below the stave if it's the top/bottom string\n if (stem_direction === 1 && isTopBound) {\n line_ys.push(stem_y - 2);\n } else if (stem_direction === -1 && isBottomBound) {\n line_ys.push(stem_y + 2);\n }\n });\n\n // Add the sorted y values to the\n stem_lines.push(line_ys.sort((a, b) => a - b));\n });\n\n return stem_lines;\n}\n\nexport class TabNote extends StemmableNote {\n static get CATEGORY() { return 'tabnotes'; }\n\n // Initialize the TabNote with a `tab_struct` full of properties\n // and whether to `draw_stem` when rendering the note\n constructor(tab_struct, draw_stem) {\n super(tab_struct);\n this.setAttribute('type', 'TabNote');\n\n this.ghost = false; // Renders parenthesis around notes\n // Note properties\n //\n // The fret positions in the note. An array of `{ str: X, fret: X }`\n this.positions = tab_struct.positions;\n\n // Render Options\n Vex.Merge(this.render_options, {\n // font size for note heads and rests\n glyph_font_scale: Flow.DEFAULT_TABLATURE_FONT_SCALE,\n // Flag to draw a stem\n draw_stem,\n // Flag to draw dot modifiers\n draw_dots: draw_stem,\n // Flag to extend the main stem through the stave and fret positions\n draw_stem_through_stave: false,\n // vertical shift from stave line\n y_shift: 0,\n // normal glyph scale\n scale: 1.0,\n // default tablature font\n font: '10pt Arial',\n });\n\n this.glyph = Flow.getGlyphProps(this.duration, this.noteType);\n\n if (!this.glyph) {\n throw new Vex.RuntimeError(\n 'BadArguments',\n `Invalid note initialization data (No glyph found): ${JSON.stringify(tab_struct)}`\n );\n }\n\n this.buildStem();\n\n if (tab_struct.stem_direction) {\n this.setStemDirection(tab_struct.stem_direction);\n } else {\n this.setStemDirection(Stem.UP);\n }\n\n // Renders parenthesis around notes\n this.ghost = false;\n this.updateWidth();\n }\n\n reset() {\n if (this.stave) this.setStave(this.stave);\n }\n\n // The ModifierContext category\n getCategory() { return TabNote.CATEGORY; }\n\n // Set as ghost `TabNote`, surrounds the fret positions with parenthesis.\n // Often used for indicating frets that are being bent to\n setGhost(ghost) {\n this.ghost = ghost;\n this.updateWidth();\n return this;\n }\n\n // Determine if the note has a stem\n hasStem() { return this.render_options.draw_stem; }\n\n // Get the default stem extension for the note\n getStemExtension() {\n const glyph = this.getGlyph();\n\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n\n if (glyph) {\n return this.getStemDirection() === 1\n ? glyph.tabnote_stem_up_extension\n : glyph.tabnote_stem_down_extension;\n }\n\n return 0;\n }\n\n // Add a dot to the note\n addDot() {\n const dot = new Dot();\n this.dots += 1;\n return this.addModifier(dot, 0);\n }\n\n // Calculate and store the width of the note\n updateWidth() {\n this.glyphs = [];\n this.width = 0;\n for (let i = 0; i < this.positions.length; ++i) {\n let fret = this.positions[i].fret;\n if (this.ghost) fret = '(' + fret + ')';\n const glyph = Flow.tabToGlyph(fret, this.render_options.scale);\n this.glyphs.push(glyph);\n this.width = Math.max(glyph.getWidth(), this.width);\n }\n // For some reason we associate a notehead glyph with a TabNote, and this\n // glyph is used for certain width calculations. Of course, this is totally\n // incorrect since a notehead is a poor approximation for the dimensions of\n // a fret number which can have multiple digits. As a result, we must\n // overwrite getWidth() to return the correct width\n this.glyph.getWidth = () => this.width;\n }\n\n // Set the `stave` to the note\n setStave(stave) {\n super.setStave(stave);\n this.context = stave.context;\n\n // Calculate the fret number width based on font used\n let i;\n if (this.context) {\n const ctx = this.context;\n this.width = 0;\n for (i = 0; i < this.glyphs.length; ++i) {\n const glyph = this.glyphs[i];\n const text = '' + glyph.text;\n if (text.toUpperCase() !== 'X') {\n ctx.save();\n ctx.setRawFont(this.render_options.font);\n glyph.width = ctx.measureText(text).width;\n ctx.restore();\n glyph.getWidth = () => glyph.width;\n }\n this.width = Math.max(glyph.getWidth(), this.width);\n }\n this.glyph.getWidth = () => this.width;\n }\n\n // we subtract 1 from `line` because getYForLine expects a 0-based index,\n // while the position.str is a 1-based index\n const ys = this.positions.map(({ str: line }) => stave.getYForLine(line - 1));\n\n this.setYs(ys);\n\n if (this.stem) {\n this.stem.setYBounds(this.getStemY(), this.getStemY());\n }\n\n return this;\n }\n\n // Get the fret positions for the note\n getPositions() { return this.positions; }\n\n // Add self to the provided modifier context `mc`\n addToModifierContext(mc) {\n this.setModifierContext(mc);\n for (let i = 0; i < this.modifiers.length; ++i) {\n this.modifierContext.addModifier(this.modifiers[i]);\n }\n this.modifierContext.addModifier(this);\n this.preFormatted = false;\n return this;\n }\n\n // Get the `x` coordinate to the right of the note\n getTieRightX() {\n let tieStartX = this.getAbsoluteX();\n const note_glyph_width = this.glyph.getWidth();\n tieStartX += note_glyph_width / 2;\n tieStartX += (-this.width / 2) + this.width + 2;\n\n return tieStartX;\n }\n\n // Get the `x` coordinate to the left of the note\n getTieLeftX() {\n let tieEndX = this.getAbsoluteX();\n const note_glyph_width = this.glyph.getWidth();\n tieEndX += note_glyph_width / 2;\n tieEndX -= (this.width / 2) + 2;\n\n return tieEndX;\n }\n\n // Get the default `x` and `y` coordinates for a modifier at a specific\n // `position` at a fret position `index`\n getModifierStartXY(position, index) {\n if (!this.preFormatted) {\n throw new Vex.RERR('UnformattedNote', \"Can't call GetModifierStartXY on an unformatted note\");\n }\n\n if (this.ys.length === 0) {\n throw new Vex.RERR('NoYValues', 'No Y-Values calculated for this note.');\n }\n\n let x = 0;\n if (position === Modifier.Position.LEFT) {\n x = -1 * 2; // FIXME: modifier padding, move to font file\n } else if (position === Modifier.Position.RIGHT) {\n x = this.width + 2; // FIXME: modifier padding, move to font file\n } else if (position === Modifier.Position.BELOW || position === Modifier.Position.ABOVE) {\n const note_glyph_width = this.glyph.getWidth();\n x = note_glyph_width / 2;\n }\n\n return {\n x: this.getAbsoluteX() + x,\n y: this.ys[index],\n };\n }\n\n // Get the default line for rest\n getLineForRest() { return this.positions[0].str; }\n\n // Pre-render formatting\n preFormat() {\n if (this.preFormatted) return;\n if (this.modifierContext) this.modifierContext.preFormat();\n // width is already set during init()\n this.setPreFormatted(true);\n }\n\n // Get the x position for the stem\n getStemX() { return this.getCenterGlyphX(); }\n\n // Get the y position for the stem\n getStemY() {\n const num_lines = this.stave.getNumLines();\n\n // The decimal staff line amounts provide optimal spacing between the\n // fret number and the stem\n const stemUpLine = -0.5;\n const stemDownLine = num_lines - 0.5;\n const stemStartLine = Stem.UP === this.stem_direction ? stemUpLine : stemDownLine;\n\n return this.stave.getYForLine(stemStartLine);\n }\n\n // Get the stem extents for the tabnote\n getStemExtents() {\n return this.stem.getExtents();\n }\n\n // Draw the fal onto the context\n drawFlag() {\n const {\n beam, glyph, context, stem, stem_direction,\n render_options: { draw_stem, glyph_font_scale },\n } = this;\n\n const shouldDrawFlag = beam == null && draw_stem;\n\n // Now it's the flag's turn.\n if (glyph.flag && shouldDrawFlag) {\n const flag_x = this.getStemX() + 1;\n const flag_y = this.getStemY() - stem.getHeight();\n\n const flag_code = stem_direction === Stem.DOWN\n ? glyph.code_flag_downstem // Down stems have flags on the left.\n : glyph.code_flag_upstem;\n\n // Draw the Flag\n Glyph.renderGlyph(context, flag_x, flag_y, glyph_font_scale, flag_code, { category: 'flag.tabStem' });\n }\n }\n\n // Render the modifiers onto the context\n drawModifiers() {\n // Draw the modifiers\n this.modifiers.forEach((modifier) => {\n // Only draw the dots if enabled\n if (modifier.getCategory() === 'dots' && !this.render_options.draw_dots) return;\n\n modifier.setContext(this.context);\n modifier.drawWithStyle();\n });\n }\n\n // Render the stem extension through the fret positions\n drawStemThrough() {\n const stem_x = this.getStemX();\n const stem_y = this.getStemY();\n const ctx = this.context;\n\n const stem_through = this.render_options.draw_stem_through_stave;\n const draw_stem = this.render_options.draw_stem;\n if (draw_stem && stem_through) {\n const total_lines = this.stave.getNumLines();\n const strings_used = this.positions.map(position => position.str);\n\n const unused_strings = getUnusedStringGroups(total_lines, strings_used);\n const stem_lines = getPartialStemLines(\n stem_y,\n unused_strings,\n this.getStave(),\n this.getStemDirection()\n );\n\n ctx.save();\n ctx.setLineWidth(Stem.WIDTH);\n stem_lines.forEach(bounds => {\n if (bounds.length === 0) return;\n\n ctx.beginPath();\n ctx.moveTo(stem_x, bounds[0]);\n ctx.lineTo(stem_x, bounds[bounds.length - 1]);\n ctx.stroke();\n ctx.closePath();\n });\n ctx.restore();\n }\n }\n\n // Render the fret positions onto the context\n drawPositions() {\n const ctx = this.context;\n const x = this.getAbsoluteX();\n const ys = this.ys;\n for (let i = 0; i < this.positions.length; ++i) {\n const y = ys[i] + this.render_options.y_shift;\n const glyph = this.glyphs[i];\n\n // Center the fret text beneath the notation note head\n const note_glyph_width = this.glyph.getWidth();\n const tab_x = x + (note_glyph_width / 2) - (glyph.getWidth() / 2);\n\n // FIXME: Magic numbers.\n ctx.clearRect(tab_x - 2, y - 3, glyph.getWidth() + 4, 6);\n\n if (glyph.code) {\n Glyph.renderGlyph(ctx, tab_x, y,\n this.render_options.glyph_font_scale * this.render_options.scale,\n glyph.code);\n } else {\n ctx.save();\n ctx.setRawFont(this.render_options.font);\n const text = glyph.text.toString();\n ctx.fillText(text, tab_x, y + 5 * this.render_options.scale);\n ctx.restore();\n }\n }\n }\n\n // The main rendering function for the entire note\n draw() {\n this.checkContext();\n\n if (!this.stave) {\n throw new Vex.RERR('NoStave', \"Can't draw without a stave.\");\n }\n\n if (this.ys.length === 0) {\n throw new Vex.RERR('NoYValues', \"Can't draw note without Y values.\");\n }\n\n this.setRendered();\n const render_stem = this.beam == null && this.render_options.draw_stem;\n\n this.drawPositions();\n this.drawStemThrough();\n\n const stem_x = this.getStemX();\n\n this.stem.setNoteHeadXBounds(stem_x, stem_x);\n\n if (render_stem) {\n this.context.openGroup('stem', null, { pointerBBox: true });\n this.stem.setContext(this.context).draw();\n this.context.closeGroup();\n }\n\n this.drawFlag();\n this.drawModifiers();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Balazs Forian-Szabo\n//\n// ## Description\n//\n// This file implements `VibratoBrackets`\n// that renders vibrato effect between two notes.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Vibrato } from './vibrato';\n\n// To enable logging for this class. Set `Vex.Flow.VibratoBracket.DEBUG` to `true`.\nfunction L(...args) { if (VibratoBracket.DEBUG) Vex.L('Vex.Flow.VibratoBracket', args); }\n\nexport class VibratoBracket extends Element {\n // bracket_data = {\n // start: Vex.Flow.Note (optional)\n // stop: Vex.Flow.Note (optional)\n // };\n // Either the stop or start note must be set, or both of them.\n // A null value for the start or stop note indicates that the vibrato\n // is drawn from the beginning or until the end of the stave accordingly.\n constructor(bracket_data) {\n super();\n this.setAttribute('type', 'VibratoBracket');\n\n this.start = bracket_data.start;\n this.stop = bracket_data.stop;\n\n this.line = 1;\n\n this.render_options = {\n harsh: false,\n wave_height: 6,\n wave_width: 4,\n wave_girth: 2,\n };\n }\n\n // Set line position of the vibrato bracket\n setLine(line) { this.line = line; return this; }\n setHarsh(harsh) { this.render_options.harsh = harsh; return this; }\n\n // Draw the vibrato bracket on the rendering context\n draw() {\n const ctx = this.context;\n this.setRendered();\n\n const y = (this.start)\n ? this.start.getStave().getYForTopText(this.line)\n : this.stop.getStave().getYForTopText(this.line);\n\n // If start note is not set then vibrato will be drawn\n // from the beginning of the stave\n const start_x = (this.start)\n ? this.start.getAbsoluteX()\n : this.stop.getStave().getTieStartX();\n\n // If stop note is not set then vibrato will be drawn\n // until the end of the stave\n const stop_x = (this.stop)\n ? this.stop.getAbsoluteX() - this.stop.getWidth() - 5\n : this.start.getStave().getTieEndX() - 10;\n\n this.render_options.vibrato_width = stop_x - start_x;\n\n L('Rendering VibratoBracket: start_x:', start_x, 'stop_x:', stop_x, 'y:', y);\n\n Vibrato.renderVibrato(ctx, start_x, y, this.render_options);\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements multiple measure rests\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Element } from './element';\nimport { Glyph } from './glyph';\nimport { NoteHead } from './notehead';\nimport { StaveModifier } from './stavemodifier';\nimport { TimeSignature } from './timesignature';\n\nlet semibrave_rest;\nfunction get_semibrave_rest() {\n if (!semibrave_rest) {\n const notehead = new NoteHead({ duration: 'w', note_type: 'r' });\n semibrave_rest = {\n glyph_font_scale: notehead.render_options.glyph_font_scale,\n glyph_code: notehead.glyph_code,\n width: notehead.getWidth(),\n };\n }\n return semibrave_rest;\n}\n\nexport class MultiMeasureRest extends Element {\n // Parameters:\n // * `number_of_measures` - Number of measures.\n // * `options` - The options object.\n // * `show_number` - Show number of measures string or not.\n // * `number_line` - Staff line to render the number of measures string.\n // * `number_glyph_point` - Size of the number of measures string glyphs.\n // * `padding_left` - Left padding from stave x.\n // * `padding_right` - Right padding from stave end x.\n // * `line` - Staff line to render rest line or rest symbols.\n // * `spacing_between_lines_px` - Spacing between staff lines to\n // resolve serif height or {2-bar and 4-bar}rest symbol height.\n // * `line_thickness` - Rest line thickness.\n // * `serif_thickness` - Rest serif line thickness.\n // * `use_symbols` - Use rest symbols or not.\n // * `symbol_spacing` - Spacing between each rest symbol glyphs.\n // * `semibrave_rest_glyph_scale` - Size of the semibrave(1-bar) rest symbol.\n constructor(number_of_measures, options) {\n super();\n this.setAttribute('type', 'MultiMeasureRest');\n\n const point = this.musicFont.lookupMetric('digits.point');\n const fontLineShift = this.musicFont.lookupMetric('digits.shiftLine', 0);\n\n this.render_options = {\n show_number: true,\n number_line: -0.5,\n number_glyph_point: point, // same as TimeSignature.\n\n padding_left: undefined,\n padding_right: undefined,\n\n line: 2,\n\n spacing_between_lines_px: 10, // same as Stave.\n\n line_thickness: undefined,\n serif_thickness: 2,\n\n use_symbols: false,\n symbol_spacing: undefined,\n\n /* same as NoteHead. */\n semibrave_rest_glyph_scale: Flow.DEFAULT_NOTATION_FONT_SCALE,\n };\n Vex.Merge(this.render_options, options);\n\n this.render_options.number_line += fontLineShift;\n\n this.number_of_measures = number_of_measures;\n this.xs = {\n left: NaN,\n right: NaN,\n };\n }\n\n getXs() {\n return this.xs;\n }\n\n setStave(stave) {\n this.stave = stave;\n return this;\n }\n\n getStave() {\n return this.stave;\n }\n\n drawLine(ctx, left, right, sbl) {\n const y = this.stave.getYForLine(this.render_options.line);\n const padding = (right - left) * 0.1;\n\n left += padding;\n right -= padding;\n\n const serif = {\n thickness: this.render_options.serif_thickness,\n height: sbl,\n };\n let lineThicknessHalf = sbl * 0.25;\n if (!isNaN(this.render_options.line_thickness)) {\n lineThicknessHalf = this.render_options.line_thickness * 0.5;\n }\n\n ctx.save();\n ctx.beginPath();\n ctx.moveTo(left, y - sbl);\n ctx.lineTo(left + serif.thickness, y - sbl);\n ctx.lineTo(left + serif.thickness, y - lineThicknessHalf);\n ctx.lineTo(right - serif.thickness, y - lineThicknessHalf);\n ctx.lineTo(right - serif.thickness, y - sbl);\n ctx.lineTo(right, y - sbl);\n ctx.lineTo(right, y + sbl);\n ctx.lineTo(right - serif.thickness, y + sbl);\n ctx.lineTo(right - serif.thickness, y + lineThicknessHalf);\n ctx.lineTo(left + serif.thickness, y + lineThicknessHalf);\n ctx.lineTo(left + serif.thickness, y + sbl);\n ctx.lineTo(left, y + sbl);\n ctx.closePath();\n ctx.fill();\n }\n\n drawSymbols(ctx, left, right, sbl) {\n const n4 = Math.floor(this.number_of_measures / 4);\n const n = this.number_of_measures % 4;\n const n2 = Math.floor(n / 2);\n const n1 = n % 2;\n\n const semibrave_rest = get_semibrave_rest();\n const semibrave_rest_width = semibrave_rest.width *\n (this.render_options.semibrave_rest_glyph_scale / semibrave_rest.glyph_font_scale);\n const glyphs = {\n 2: {\n width: semibrave_rest_width * 0.5,\n height: sbl,\n },\n 1: {\n width: semibrave_rest_width,\n },\n };\n\n let spacing = semibrave_rest_width * 1.35;\n if (!isNaN(this.render_options.symbol_spacing)) {\n spacing = this.render_options.symbol_spacing;\n }\n\n const width = (n4 * glyphs[2].width) + (n2 * glyphs[2].width)\n + (n1 * glyphs[1].width) + ((n4 + n2 + n1 - 1) * spacing);\n let x = left + ((right - left) * 0.5) - (width * 0.5);\n const yTop = this.stave.getYForLine(this.render_options.line - 1);\n const yMiddle = this.stave.getYForLine(this.render_options.line);\n const yBottom = this.stave.getYForLine(this.render_options.line + 1);\n\n ctx.save();\n ctx.setStrokeStyle('none');\n ctx.setLineWidth(0);\n\n for (let i = 0; i < n4; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n ctx.fillRect(x, yBottom - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n2; ++i) {\n ctx.fillRect(x, yMiddle - glyphs[2].height, glyphs[2].width, glyphs[2].height);\n x += glyphs[2].width + spacing;\n }\n for (let i = 0; i < n1; ++i) {\n Glyph.renderGlyph(ctx, x, yTop, this.render_options.semibrave_rest_glyph_scale,\n semibrave_rest.glyph_code);\n x += glyphs[1].width + spacing;\n }\n\n ctx.restore();\n }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n const ctx = this.context;\n const stave = this.stave;\n const sbl = this.render_options.spacing_between_lines_px;\n\n let left = stave.getNoteStartX();\n let right = stave.getNoteEndX();\n\n // FIXME: getNoteStartX() returns x+5(barline width) and\n // getNoteEndX() returns x + width(no barline width) by default. how to fix?\n const begModifiers = stave.getModifiers(StaveModifier.Position.BEGIN);\n if (begModifiers.length === 1 && begModifiers[0].getCategory() === 'barlines') {\n left -= begModifiers[0].getWidth();\n }\n\n if (!isNaN(this.render_options.padding_left)) {\n left = stave.getX() + this.render_options.padding_left;\n }\n\n if (!isNaN(this.render_options.padding_right)) {\n right = stave.getX() + stave.getWidth() - this.render_options.padding_right;\n }\n\n this.xs.left = left;\n this.xs.right = right;\n\n if (this.render_options.use_symbols) {\n this.drawSymbols(ctx, left, right, sbl);\n } else {\n this.drawLine(ctx, left, right, sbl);\n }\n\n if (this.render_options.show_number) {\n const timeSpec = '/' + this.number_of_measures;\n const timeSig = new TimeSignature(null, undefined, false);\n timeSig.point = this.render_options.number_glyph_point;\n timeSig.setTimeSig(timeSpec);\n timeSig.setStave(stave);\n timeSig.x = left + ((right - left) * 0.5) - (timeSig.timeSig.glyph.getMetrics().width * 0.5);\n timeSig.bottomLine = this.render_options.number_line;\n timeSig.setContext(ctx).draw();\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Copyright Mohit Muthanna 2010\n//\n// Author Taehoon Moon 2014\n\nimport { Vex } from './vex';\nimport { Note } from './note';\nimport { Clef } from './clef';\nimport { Glyph } from './glyph';\n\n/** @constructor */\nexport class ClefNote extends Note {\n static get CATEGORY() { return 'clefnote'; }\n\n constructor(type, size, annotation) {\n super({ duration: 'b' });\n this.setAttribute('type', 'ClefNote');\n\n this.setType(type, size, annotation);\n\n // Note properties\n this.ignore_ticks = true;\n }\n\n setType(type, size, annotation) {\n this.type = type;\n this.clef_obj = new Clef(type, size, annotation);\n this.clef = this.clef_obj.clef;\n this.glyph = new Glyph(this.clef.code, this.clef.point);\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n\n getClef() {\n return this.clef;\n }\n\n setContext(context) {\n this.context = context;\n this.glyph.setContext(this.context);\n return this;\n }\n\n getBoundingBox() {\n return super.getBoundingBox();\n }\n\n addToModifierContext() {\n /* overridden to ignore */\n return this;\n }\n\n getCategory() { return ClefNote.CATEGORY; }\n\n preFormat() {\n this.setPreFormatted(true);\n return this;\n }\n\n draw() {\n if (!this.stave) throw new Vex.RERR('NoStave', \"Can't draw without a stave.\");\n\n if (!this.glyph.getContext()) {\n this.glyph.setContext(this.context);\n }\n\n this.setRendered();\n const abs_x = this.getAbsoluteX();\n\n this.glyph.setStave(this.stave);\n this.glyph.setYShift(\n this.stave.getYForLine(this.clef.line) - this.stave.getYForGlyphs());\n this.glyph.renderToStave(abs_x);\n\n // If the Vex.Flow.Clef has an annotation, such as 8va, draw it.\n if (this.clef_obj.annotation !== undefined) {\n const attachment = new Glyph(this.clef_obj.annotation.code, this.clef_obj.annotation.point);\n if (!attachment.getContext()) {\n attachment.setContext(this.context);\n }\n attachment.setStave(this.stave);\n attachment.setYShift(\n this.stave.getYForLine(this.clef_obj.annotation.line) - this.stave.getYForGlyphs());\n attachment.setXShift(this.clef_obj.annotation.x_shift);\n attachment.renderToStave(abs_x);\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Mark Meeus 2019\n\nimport { Note } from './note';\nimport { KeySignature } from './keysignature';\n\nexport class KeySigNote extends Note {\n constructor(keySpec, cancelKeySpec, alterKeySpec) {\n super({ duration: 'b' });\n this.setAttribute('type', 'KeySigNote');\n\n this.keySignature = new KeySignature(keySpec, cancelKeySpec, alterKeySpec);\n\n // Note properties\n this.ignore_ticks = true;\n }\n\n getBoundingBox() {\n return super.getBoundingBox();\n }\n\n addToModifierContext() {\n /* overridden to ignore */\n return this;\n }\n\n preFormat() {\n this.setPreFormatted(true);\n this.keySignature.setStave(this.stave);\n this.keySignature.format();\n this.setWidth(this.keySignature.width);\n return this;\n }\n\n draw() {\n this.stave.checkContext();\n this.setRendered();\n this.keySignature.x = this.getAbsoluteX();\n this.keySignature.setContext(this.context);\n this.keySignature.draw();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author Taehoon Moon 2014\n\nimport { Note } from './note';\nimport { TimeSignature } from './timesignature';\n\nexport class TimeSigNote extends Note {\n constructor(timeSpec, customPadding) {\n super({ duration: 'b' });\n this.setAttribute('type', 'TimeSigNote');\n\n const timeSignature = new TimeSignature(timeSpec, customPadding);\n this.timeSig = timeSignature.getTimeSig();\n this.setWidth(this.timeSig.glyph.getMetrics().width);\n\n // Note properties\n this.ignore_ticks = true;\n }\n\n getBoundingBox() {\n return super.getBoundingBox();\n }\n\n addToModifierContext() {\n /* overridden to ignore */\n return this;\n }\n\n preFormat() {\n this.setPreFormatted(true);\n return this;\n }\n\n draw() {\n this.stave.checkContext();\n this.setRendered();\n\n if (!this.timeSig.glyph.getContext()) {\n this.timeSig.glyph.setContext(this.context);\n }\n\n this.timeSig.glyph.setStave(this.stave);\n this.timeSig.glyph.setYShift(\n this.stave.getYForLine(this.timeSig.line) - this.stave.getYForGlyphs());\n this.timeSig.glyph.renderToStave(this.getAbsoluteX());\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of ties between contiguous notes. The\n// ties include: regular ties, hammer ons, pull offs, and slides.\n\nimport { Vex } from './vex';\nimport { TabTie } from './tabtie';\n\nexport class TabSlide extends TabTie {\n static get SLIDE_UP() {\n return 1;\n }\n static get SLIDE_DOWN() {\n return -1;\n }\n\n static createSlideUp(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_UP);\n }\n\n static createSlideDown(notes) {\n return new TabSlide(notes, TabSlide.SLIDE_DOWN);\n }\n\n constructor(notes, direction) {\n /**\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * first_indices: [n1, n2, n3],\n * last_indices: [n1, n2, n3]\n * }\n *\n **/\n super(notes, 'sl.');\n this.setAttribute('type', 'TabSlide');\n\n if (!direction) {\n const first_fret = notes.first_note.getPositions()[0].fret;\n const last_fret = notes.last_note.getPositions()[0].fret;\n\n direction = ((parseInt(first_fret, 10) > parseInt(last_fret, 10)) ?\n TabSlide.SLIDE_DOWN : TabSlide.SLIDE_UP);\n }\n\n this.slide_direction = direction;\n this.render_options.cp1 = 11;\n this.render_options.cp2 = 14;\n this.render_options.y_shift = 0.5;\n\n this.setFont({ font: 'Times', size: 10, style: 'bold italic' });\n this.setNotes(notes);\n }\n\n renderTie(params) {\n if (params.first_ys.length === 0 || params.last_ys.length === 0) {\n throw new Vex.RERR('BadArguments', 'No Y-values to render');\n }\n\n const ctx = this.context;\n const first_x_px = params.first_x_px;\n const first_ys = params.first_ys;\n const last_x_px = params.last_x_px;\n\n const direction = this.slide_direction;\n if (direction !== TabSlide.SLIDE_UP && direction !== TabSlide.SLIDE_DOWN) {\n throw new Vex.RERR('BadSlide', 'Invalid slide direction');\n }\n\n for (let i = 0; i < this.first_indices.length; ++i) {\n const slide_y = first_ys[this.first_indices[i]] +\n this.render_options.y_shift;\n\n if (isNaN(slide_y)) {\n throw new Vex.RERR('BadArguments', 'Bad indices for slide rendering.');\n }\n\n ctx.beginPath();\n ctx.moveTo(first_x_px, slide_y + (3 * direction));\n ctx.lineTo(last_x_px, slide_y - (3 * direction));\n ctx.closePath();\n ctx.stroke();\n }\n\n this.setRendered();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { StaveNote } from './stavenote';\nimport { Stem } from './stem';\nimport { Flow } from './tables';\n\nexport class GraceNote extends StaveNote {\n static get CATEGORY() { return 'gracenotes'; }\n static get LEDGER_LINE_OFFSET() { return 2; }\n static get SCALE() { return 0.66; }\n\n constructor(note_struct) {\n super(Object.assign(note_struct, {\n glyph_font_scale: Flow.DEFAULT_NOTATION_FONT_SCALE * GraceNote.SCALE,\n stroke_px: GraceNote.LEDGER_LINE_OFFSET,\n }));\n this.setAttribute('type', 'GraceNote');\n\n this.slash = note_struct.slash;\n this.slur = true;\n\n this.buildNoteHeads();\n\n this.width = 3;\n }\n\n getStemExtension() {\n if (this.stem_extension_override != null) {\n return this.stem_extension_override;\n }\n\n const glyph = this.getGlyph();\n if (glyph) {\n let ret = super.getStemExtension();\n if (glyph.stem) {\n const staveNoteScale = this.getStaveNoteScale();\n ret = ((Stem.HEIGHT + ret) * staveNoteScale) - Stem.HEIGHT;\n }\n return ret;\n }\n\n return 0;\n }\n\n getCategory() { return GraceNote.CATEGORY; }\n\n // FIXME: move this to more basic class.\n getStaveNoteScale() {\n return this.render_options.glyph_font_scale / Flow.DEFAULT_NOTATION_FONT_SCALE;\n }\n\n draw() {\n super.draw();\n this.setRendered();\n const stem = this.stem;\n if (this.slash && stem) {\n const staveNoteScale = this.getStaveNoteScale();\n\n // some magic numbers are based on the staveNoteScale 0.66.\n const offsetScale = staveNoteScale / 0.66;\n let slashBBox = undefined;\n const beam = this.beam;\n if (beam) {\n // FIXME: should render slash after beam?\n if (!beam.postFormatted) {\n beam.postFormat();\n }\n\n slashBBox = this.calcBeamedNotesSlashBBox(8 * offsetScale,\n 8 * offsetScale,\n {\n stem: 6 * offsetScale,\n beam: 5 * offsetScale,\n });\n } else {\n const stem_direction = this.getStemDirection();\n const noteHeadBounds = this.getNoteHeadBounds();\n const noteStemHeight = stem.getHeight();\n let x = this.getAbsoluteX();\n let y = stem_direction === Flow.Stem.DOWN ?\n noteHeadBounds.y_top - noteStemHeight :\n noteHeadBounds.y_bottom - noteStemHeight;\n\n const defaultStemExtention = stem_direction === Flow.Stem.DOWN ?\n this.glyph.stem_down_extension :\n this.glyph.stem_up_extension;\n\n let defaultOffsetY = Flow.STEM_HEIGHT;\n defaultOffsetY -= (defaultOffsetY / 2.8);\n defaultOffsetY += defaultStemExtention;\n y += ((defaultOffsetY * staveNoteScale) * stem_direction);\n\n const offsets = stem_direction === Flow.Stem.UP ? {\n x1: 1,\n y1: 0,\n x2: 13,\n y2: -9,\n } : {\n x1: -4,\n y1: 1,\n x2: 13,\n y2: 9,\n };\n\n x += (offsets.x1 * offsetScale);\n y += (offsets.y1 * offsetScale);\n slashBBox = {\n x1: x,\n y1: y,\n x2: x + (offsets.x2 * offsetScale),\n y2: y + (offsets.y2 * offsetScale),\n };\n }\n\n // FIXME: avoide staff lines, leadger lines or others.\n\n const ctx = this.context;\n ctx.save();\n ctx.setLineWidth(1 * offsetScale); // FIXME: use more appropriate value.\n ctx.beginPath();\n ctx.moveTo(slashBBox.x1, slashBBox.y1);\n ctx.lineTo(slashBBox.x2, slashBBox.y2);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n }\n }\n\n calcBeamedNotesSlashBBox(slashStemOffset, slashBeamOffset, protrusions) {\n const beam = this.beam;\n const beam_slope = beam.slope;\n const isBeamEndNote = (beam.notes[beam.notes.length - 1] === this);\n const scaleX = isBeamEndNote ? -1 : 1;\n const beam_angle = Math.atan(beam_slope * scaleX);\n\n // slash line intersecting point on beam.\n const iPointOnBeam = {\n dx: Math.cos(beam_angle) * slashBeamOffset,\n dy: Math.sin(beam_angle) * slashBeamOffset,\n };\n\n slashStemOffset *= this.getStemDirection();\n const slash_angle = Math.atan((iPointOnBeam.dy - slashStemOffset) / iPointOnBeam.dx);\n const protrusion_stem_dx = Math.cos(slash_angle) * protrusions.stem * scaleX;\n const protrusion_stem_dy = Math.sin(slash_angle) * protrusions.stem;\n const protrusion_beam_dx = Math.cos(slash_angle) * protrusions.beam * scaleX;\n const protrusion_beam_dy = Math.sin(slash_angle) * protrusions.beam;\n\n const stemX = this.getStemX();\n const stem0X = beam.notes[0].getStemX();\n const stemY = this.beam.getBeamYToDraw() + ((stemX - stem0X) * beam_slope);\n\n const ret = {\n x1: stemX - protrusion_stem_dx,\n y1: (stemY + slashStemOffset - protrusion_stem_dy),\n x2: stemX + (iPointOnBeam.dx * scaleX) + protrusion_beam_dx,\n y2: stemY + iPointOnBeam.dy + protrusion_beam_dy,\n };\n return ret;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Balazs Forian-Szabo\n//\n// ## Description\n//\n// A basic implementation of grace notes\n// to be rendered on a tab stave.\n//\n// See `tests/gracetabnote_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { TabNote } from './tabnote';\n\nexport class GraceTabNote extends TabNote {\n static get CATEGORY() { return 'gracetabnotes'; }\n\n constructor(note_struct) {\n super(note_struct, false);\n this.setAttribute('type', 'GraceTabNote');\n\n Vex.Merge(this.render_options, {\n // vertical shift from stave line\n y_shift: 0.3,\n // grace glyph scale\n scale: 0.6,\n // grace tablature font\n font: '7.5pt Arial',\n });\n\n this.updateWidth();\n }\n\n getCategory() { return GraceTabNote.CATEGORY; }\n\n draw() {\n super.draw();\n this.setRendered();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class implements varies types of tunings for tablature.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\n\nexport class Tuning {\n static get names() {\n return {\n 'standard': 'E/5,B/4,G/4,D/4,A/3,E/3',\n 'dagdad': 'D/5,A/4,G/4,D/4,A/3,D/3',\n 'dropd': 'E/5,B/4,G/4,D/4,A/3,D/3',\n 'eb': 'Eb/5,Bb/4,Gb/4,Db/4,Ab/3,Db/3',\n 'standardBanjo': 'D/5,B/4,G/4,D/4,G/5',\n };\n }\n\n constructor(tuningString = 'E/5,B/4,G/4,D/4,A/3,E/3,B/2,E/2') {\n // Default to standard tuning.\n this.setTuning(tuningString);\n }\n\n noteToInteger(noteString) {\n return Flow.keyProperties(noteString).int_value;\n }\n\n setTuning(noteString) {\n if (Tuning.names[noteString]) {\n noteString = Tuning.names[noteString];\n }\n\n this.tuningString = noteString;\n this.tuningValues = [];\n this.numStrings = 0;\n\n const keys = noteString.split(/\\s*,\\s*/);\n if (keys.length === 0) {\n throw new Vex.RERR('BadArguments', 'Invalid tuning string: ' + noteString);\n }\n\n this.numStrings = keys.length;\n for (let i = 0; i < this.numStrings; ++i) {\n this.tuningValues[i] = this.noteToInteger(keys[i]);\n }\n }\n\n getValueForString(stringNum) {\n const s = parseInt(stringNum, 10);\n if (s < 1 || s > this.numStrings) {\n throw new Vex.RERR(\n 'BadArguments', `String number must be between 1 and ${this.numStrings}:${stringNum}`\n );\n }\n\n return this.tuningValues[s - 1];\n }\n\n getValueForFret(fretNum, stringNum) {\n const stringValue = this.getValueForString(stringNum);\n const f = parseInt(fretNum, 10);\n\n if (f < 0) {\n throw new Vex.RERR('BadArguments', 'Fret number must be 0 or higher: ' +\n fretNum);\n }\n\n return stringValue + f;\n }\n\n getNoteForFret(fretNum, stringNum) {\n const noteValue = this.getValueForFret(fretNum, stringNum);\n\n const octave = Math.floor(noteValue / 12);\n const value = noteValue % 12;\n\n return Flow.integerToNote(value) + '/' + octave;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This class implements diatonic key management.\n\nimport { Vex } from './vex';\nimport { Music } from './music';\n\nexport class KeyManager {\n constructor(key) {\n this.music = new Music();\n this.setKey(key);\n }\n\n setKey(key) {\n this.key = key;\n this.reset();\n return this;\n }\n\n getKey() { return this.key; }\n\n reset() {\n this.keyParts = this.music.getKeyParts(this.key);\n\n this.keyString = this.keyParts.root;\n if (this.keyParts.accidental) this.keyString += this.keyParts.accidental;\n\n const is_supported_type = Music.scaleTypes[this.keyParts.type];\n if (!is_supported_type) {\n throw new Vex.RERR('BadArguments', `Unsupported key type: ${this.key}`);\n }\n\n this.scale = this.music.getScaleTones(\n this.music.getNoteValue(this.keyString),\n Music.scaleTypes[this.keyParts.type]\n );\n\n this.scaleMap = {};\n this.scaleMapByValue = {};\n this.originalScaleMapByValue = {};\n\n const noteLocation = Music.root_indices[this.keyParts.root];\n\n for (let i = 0; i < Music.roots.length; ++i) {\n const index = (noteLocation + i) % Music.roots.length;\n const rootName = Music.roots[index];\n\n const noteName = this.music.getRelativeNoteName(rootName, this.scale[i]);\n this.scaleMap[rootName] = noteName;\n this.scaleMapByValue[this.scale[i]] = noteName;\n this.originalScaleMapByValue[this.scale[i]] = noteName;\n }\n\n return this;\n }\n\n getAccidental(key) {\n const root = this.music.getKeyParts(key).root;\n const parts = this.music.getNoteParts(this.scaleMap[root]);\n\n return {\n note: this.scaleMap[root],\n accidental: parts.accidental,\n };\n }\n\n selectNote(note) {\n note = note.toLowerCase();\n const parts = this.music.getNoteParts(note);\n\n // First look for matching note in our altered scale\n const scaleNote = this.scaleMap[parts.root];\n const modparts = this.music.getNoteParts(scaleNote);\n\n if (scaleNote === note) {\n return {\n 'note': scaleNote,\n 'accidental': parts.accidental,\n 'change': false,\n };\n }\n\n // Then search for a note of equivalent value in our altered scale\n const valueNote = this.scaleMapByValue[this.music.getNoteValue(note)];\n if (valueNote != null) {\n return {\n 'note': valueNote,\n 'accidental': this.music.getNoteParts(valueNote).accidental,\n 'change': false,\n };\n }\n\n // Then search for a note of equivalent value in the original scale\n const originalValueNote = this.originalScaleMapByValue[\n this.music.getNoteValue(note)];\n if (originalValueNote != null) {\n this.scaleMap[modparts.root] = originalValueNote;\n delete this.scaleMapByValue[this.music.getNoteValue(scaleNote)];\n this.scaleMapByValue[this.music.getNoteValue(note)] = originalValueNote;\n return {\n 'note': originalValueNote,\n 'accidental': this.music.getNoteParts(originalValueNote).accidental,\n 'change': true,\n };\n }\n\n // Then try to unmodify a currently modified note.\n if (modparts.root === note) {\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(modparts.root)] = modparts.root;\n this.scaleMap[modparts.root] = modparts.root;\n return {\n 'note': modparts.root,\n 'accidental': null,\n 'change': true,\n };\n }\n\n // Last resort -- shitshoot\n delete this.scaleMapByValue[this.music.getNoteValue(this.scaleMap[parts.root])];\n this.scaleMapByValue[this.music.getNoteValue(note)] = note;\n\n delete this.scaleMap[modparts.root];\n this.scaleMap[modparts.root] = note;\n\n return {\n note,\n 'accidental': parts.accidental,\n 'change': true,\n };\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This class by Raffaele Viglianti, 2012 http://itisnotsound.wordpress.com/\n//\n// This class implements hairpins between notes.\n// Hairpins can be either Crescendo or Descrescendo.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Modifier } from './modifier';\n\nexport class StaveHairpin extends Element {\n static get type() {\n return {\n CRESC: 1,\n DECRESC: 2,\n };\n }\n\n /* Helper function to convert ticks into pixels.\n * Requires a Formatter with voices joined and formatted (to\n * get pixels per tick)\n *\n * options is struct that has:\n *\n * {\n * height: px,\n * y_shift: px, //vertical offset\n * left_shift_ticks: 0, //left horizontal offset expressed in ticks\n * right_shift_ticks: 0 // right horizontal offset expressed in ticks\n * }\n *\n **/\n static FormatByTicksAndDraw(ctx, formatter, notes, type, position, options) {\n const ppt = formatter.pixelsPerTick;\n\n if (ppt == null) {\n throw new Vex.RuntimeError(\n 'BadArguments',\n 'A valid Formatter must be provide to draw offsets by ticks.'\n );\n }\n\n const l_shift_px = ppt * options.left_shift_ticks;\n const r_shift_px = ppt * options.right_shift_ticks;\n\n const hairpin_options = {\n height: options.height,\n y_shift: options.y_shift,\n left_shift_px: l_shift_px,\n right_shift_px: r_shift_px };\n\n new StaveHairpin({\n first_note: notes.first_note,\n last_note: notes.last_note,\n }, type)\n .setContext(ctx)\n .setRenderOptions(hairpin_options)\n .setPosition(position)\n .draw();\n }\n\n /**\n * Create a new hairpin from the specified notes.\n *\n * @constructor\n * @param {!Object} notes The notes to tie up.\n * @param {!Object} type The type of hairpin\n */\n constructor(notes, type) {\n /**\n * Notes is a struct that has:\n *\n * {\n * first_note: Note,\n * last_note: Note,\n * }\n *\n **/\n super();\n this.setAttribute('type', 'StaveHairpin');\n this.notes = notes;\n this.hairpin = type;\n this.position = Modifier.Position.BELOW;\n\n this.render_options = {\n height: 10,\n y_shift: 0, // vertical offset\n left_shift_px: 0, // left horizontal offset\n right_shift_px: 0, // right horizontal offset\n };\n\n this.setNotes(notes);\n }\n\n setPosition(position) {\n if (position === Modifier.Position.ABOVE || position === Modifier.Position.BELOW) {\n this.position = position;\n }\n return this;\n }\n\n setRenderOptions(options) {\n if (\n options.height != null &&\n options.y_shift != null &&\n options.left_shift_px != null &&\n options.right_shift_px != null\n ) {\n this.render_options = options;\n }\n return this;\n }\n\n /**\n * Set the notes to attach this hairpin to.\n *\n * @param {!Object} notes The start and end notes.\n */\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new Vex.RuntimeError(\n 'BadArguments',\n 'Hairpin needs to have either first_note or last_note set.'\n );\n }\n\n // Success. Lets grab 'em notes.\n this.first_note = notes.first_note;\n this.last_note = notes.last_note;\n return this;\n }\n\n renderHairpin(params) {\n const ctx = this.checkContext();\n let dis = this.render_options.y_shift + 20;\n let y_shift = params.first_y;\n\n if (this.position === Modifier.Position.ABOVE) {\n dis = -dis + 30;\n y_shift = params.first_y - params.staff_height;\n }\n\n const l_shift = this.render_options.left_shift_px;\n const r_shift = this.render_options.right_shift_px;\n\n ctx.beginPath();\n\n switch (this.hairpin) {\n case StaveHairpin.type.CRESC:\n ctx.moveTo(params.last_x + r_shift, y_shift + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + (this.render_options.height / 2) + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + this.render_options.height + dis);\n break;\n case StaveHairpin.type.DECRESC:\n ctx.moveTo(params.first_x + l_shift, y_shift + dis);\n ctx.lineTo(params.last_x + r_shift, y_shift + (this.render_options.height / 2) + dis);\n ctx.lineTo(params.first_x + l_shift, y_shift + this.render_options.height + dis);\n break;\n default:\n // Default is NONE, so nothing to draw\n break;\n }\n\n ctx.stroke();\n ctx.closePath();\n }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n const firstNote = this.first_note;\n const lastNote = this.last_note;\n\n const start = firstNote.getModifierStartXY(this.position, 0);\n const end = lastNote.getModifierStartXY(this.position, 0);\n\n this.renderHairpin({\n first_x: start.x,\n last_x: end.x,\n first_y: firstNote.getStave().y + firstNote.getStave().height,\n last_y: lastNote.getStave().y + lastNote.getStave().height,\n staff_height: firstNote.getStave().height,\n });\n return true;\n }\n}\n","// VexFlow - Music Engraving for HTML5\n// Copyright Mohit Muthanna 2010\n//\n// This class implements curves (for slurs)\n\nimport { Vex } from './vex';\nimport { Element } from './element';\n\nexport class Curve extends Element {\n static get Position() {\n return {\n NEAR_HEAD: 1,\n NEAR_TOP: 2,\n };\n }\n\n static get PositionString() {\n return {\n nearHead: Curve.Position.NEAR_HEAD,\n nearTop: Curve.Position.NEAR_TOP,\n };\n }\n\n // from: Start note\n // to: End note\n // options:\n // cps: List of control points\n // x_shift: pixels to shift\n // y_shift: pixels to shift\n constructor(from, to, options) {\n super();\n this.setAttribute('type', 'Curve');\n\n this.render_options = {\n spacing: 2,\n thickness: 2,\n x_shift: 0,\n y_shift: 10,\n position: Curve.Position.NEAR_HEAD,\n position_end: Curve.Position.NEAR_HEAD,\n invert: false,\n cps: [{ x: 0, y: 10 }, { x: 0, y: 10 }],\n };\n\n Vex.Merge(this.render_options, options);\n this.setNotes(from, to);\n }\n\n setNotes(from, to) {\n if (!from && !to) {\n throw new Vex.RuntimeError(\n 'BadArguments', 'Curve needs to have either first_note or last_note set.'\n );\n }\n\n this.from = from;\n this.to = to;\n return this;\n }\n\n /**\n * @return {boolean} Returns true if this is a partial bar.\n */\n isPartial() {\n return (!this.from || !this.to);\n }\n\n renderCurve(params) {\n const ctx = this.context;\n const cps = this.render_options.cps;\n\n const x_shift = this.render_options.x_shift;\n const y_shift = this.render_options.y_shift * params.direction;\n\n const first_x = params.first_x + x_shift;\n const first_y = params.first_y + y_shift;\n const last_x = params.last_x - x_shift;\n const last_y = params.last_y + y_shift;\n const thickness = this.render_options.thickness;\n\n const cp_spacing = (last_x - first_x) / (cps.length + 2);\n\n ctx.beginPath();\n ctx.moveTo(first_x, first_y);\n ctx.bezierCurveTo(\n first_x + cp_spacing + cps[0].x,\n first_y + (cps[0].y * params.direction),\n last_x - cp_spacing + cps[1].x,\n last_y + (cps[1].y * params.direction),\n last_x,\n last_y\n );\n ctx.bezierCurveTo(\n last_x - cp_spacing + cps[1].x,\n last_y + ((cps[1].y + thickness) * params.direction),\n first_x + cp_spacing + cps[0].x,\n first_y + ((cps[0].y + thickness) * params.direction),\n first_x,\n first_y\n );\n ctx.stroke();\n ctx.closePath();\n ctx.fill();\n }\n\n draw() {\n this.checkContext();\n this.setRendered();\n\n const first_note = this.from;\n const last_note = this.to;\n let first_x;\n let last_x;\n let first_y;\n let last_y;\n let stem_direction;\n\n let metric = 'baseY';\n let end_metric = 'baseY';\n\n function getPosition(position) {\n return typeof(position) === 'string'\n ? Curve.PositionString[position]\n : position;\n }\n const position = getPosition(this.render_options.position);\n const position_end = getPosition(this.render_options.position_end);\n\n if (position === Curve.Position.NEAR_TOP) {\n metric = 'topY';\n end_metric = 'topY';\n }\n\n if (position_end === Curve.Position.NEAR_HEAD) {\n end_metric = 'baseY';\n } else if (position_end === Curve.Position.NEAR_TOP) {\n end_metric = 'topY';\n }\n\n if (first_note) {\n first_x = first_note.getTieRightX();\n stem_direction = first_note.getStemDirection();\n first_y = first_note.getStemExtents()[metric];\n } else {\n first_x = last_note.getStave().getTieStartX();\n first_y = last_note.getStemExtents()[metric];\n }\n\n if (last_note) {\n last_x = last_note.getTieLeftX();\n stem_direction = last_note.getStemDirection();\n last_y = last_note.getStemExtents()[end_metric];\n } else {\n last_x = first_note.getStave().getTieEndX();\n last_y = first_note.getStemExtents()[end_metric];\n }\n\n this.renderCurve({\n first_x,\n last_x,\n first_y,\n last_y,\n direction: stem_direction * (this.render_options.invert === true ? -1 : 1),\n });\n return true;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n// This file implements the `TextDynamics` which renders traditional\n// text dynamics markings, **ie: p, f, sfz, rfz, ppp**\n//\n// You can render any dynamics string that contains a combination of\n// the following letters: P, M, F, Z, R, S\n\nimport { Vex } from './vex';\nimport { Note } from './note';\nimport { Glyph } from './glyph';\n\n// To enable logging for this class. Set `Vex.Flow.TextDynamics.DEBUG` to `true`.\nfunction L(...args) { if (TextDynamics.DEBUG) Vex.L('Vex.Flow.TextDynamics', args); }\n\nexport class TextDynamics extends Note {\n // The glyph data for each dynamics letter\n static get GLYPHS() {\n return {\n 'f': {\n code: 'dynamicForte',\n width: 12,\n },\n 'p': {\n code: 'dynamicPiano',\n width: 14,\n },\n 'm': {\n code: 'dynamicMezzo',\n width: 17,\n },\n 's': {\n code: 'dynamicSforzando',\n width: 10,\n },\n 'z': {\n code: 'dynamicZ',\n width: 12,\n },\n 'r': {\n code: 'dynamicRinforzando',\n width: 12,\n },\n };\n }\n\n // A `TextDynamics` object inherits from `Note` so that it can be formatted\n // within a `Voice`.\n // Create the dynamics marking. `text_struct` is an object\n // that contains a `duration` property and a `sequence` of\n // letters that represents the letters to render\n constructor(text_struct) {\n super(text_struct);\n this.setAttribute('type', 'TextDynamics');\n\n this.sequence = text_struct.text.toLowerCase();\n this.line = text_struct.line || 0;\n this.glyphs = [];\n\n Vex.Merge(this.render_options, {\n glyph_font_size: 40,\n });\n\n L('New Dynamics Text: ', this.sequence);\n }\n\n // Set the Stave line on which the note should be placed\n setLine(line) {\n this.line = line;\n return this;\n }\n\n // Preformat the dynamics text\n preFormat() {\n let total_width = 0;\n // Iterate through each letter\n this.sequence.split('').forEach(letter => {\n // Get the glyph data for the letter\n const glyph_data = TextDynamics.GLYPHS[letter];\n if (!glyph_data) throw new Vex.RERR('Invalid dynamics character: ' + letter);\n\n const size = this.render_options.glyph_font_size;\n const glyph = new Glyph(glyph_data.code, size, { category: 'textNote' });\n\n // Add the glyph\n this.glyphs.push(glyph);\n\n total_width += glyph_data.width;\n });\n\n // Store the width of the text\n this.setWidth(total_width);\n this.preFormatted = true;\n return this;\n }\n\n // Draw the dynamics text on the rendering context\n draw() {\n this.setRendered();\n const x = this.getAbsoluteX();\n const y = this.stave.getYForLine(this.line + (-3));\n\n L('Rendering Dynamics: ', this.sequence);\n\n let letter_x = x;\n this.glyphs.forEach((glyph, index) => {\n const current_letter = this.sequence[index];\n glyph.render(this.context, letter_x, y);\n letter_x += TextDynamics.GLYPHS[current_letter].width;\n });\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements `StaveLine` which are simply lines that connect\n// two notes. This object is highly configurable, see the `render_options`.\n// A simple line is often used for notating glissando articulations, but you\n// can format a `StaveLine` with arrows or colors for more pedagogical\n// purposes, such as diagrams.\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Flow } from './tables';\n\n// Attribution: Arrow rendering implementations based off of\n// Patrick Horgan's article, \"Drawing lines and arcs with\n// arrow heads on HTML5 Canvas\"\n//\n// Draw an arrow head that connects between 3 coordinates\nfunction drawArrowHead(ctx, x0, y0, x1, y1, x2, y2) {\n // all cases do this.\n ctx.beginPath();\n ctx.moveTo(x0, y0);\n ctx.lineTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.lineTo(x0, y0);\n ctx.closePath();\n\n ctx.fill();\n}\n\n// Helper function to draw a line with arrow heads\nfunction drawArrowLine(ctx, point1, point2, config) {\n const both_arrows = config.draw_start_arrow && config.draw_end_arrow;\n\n const x1 = point1.x;\n const y1 = point1.y;\n const x2 = point2.x;\n const y2 = point2.y;\n\n // For ends with arrow we actually want to stop before we get to the arrow\n // so that wide lines won't put a flat end on the arrow.\n const distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));\n const ratio = (distance - config.arrowhead_length / 3) / distance;\n let end_x;\n let end_y;\n let start_x;\n let start_y;\n if (config.draw_end_arrow || both_arrows) {\n end_x = Math.round(x1 + (x2 - x1) * ratio);\n end_y = Math.round(y1 + (y2 - y1) * ratio);\n } else {\n end_x = x2;\n end_y = y2;\n }\n\n if (config.draw_start_arrow || both_arrows) {\n start_x = x1 + (x2 - x1) * (1 - ratio);\n start_y = y1 + (y2 - y1) * (1 - ratio);\n } else {\n start_x = x1;\n start_y = y1;\n }\n\n if (config.color) {\n ctx.setStrokeStyle(config.color);\n ctx.setFillStyle(config.color);\n }\n\n // Draw the shaft of the arrow\n ctx.beginPath();\n ctx.moveTo(start_x, start_y);\n ctx.lineTo(end_x, end_y);\n ctx.stroke();\n ctx.closePath();\n\n // calculate the angle of the line\n const line_angle = Math.atan2(y2 - y1, x2 - x1);\n // h is the line length of a side of the arrow head\n const h = Math.abs(config.arrowhead_length / Math.cos(config.arrowhead_angle));\n\n let angle1;\n let angle2;\n let top_x;\n let top_y;\n let bottom_x;\n let bottom_y;\n\n if (config.draw_end_arrow || both_arrows) {\n angle1 = line_angle + Math.PI + config.arrowhead_angle;\n top_x = x2 + Math.cos(angle1) * h;\n top_y = y2 + Math.sin(angle1) * h;\n\n angle2 = line_angle + Math.PI - config.arrowhead_angle;\n bottom_x = x2 + Math.cos(angle2) * h;\n bottom_y = y2 + Math.sin(angle2) * h;\n\n drawArrowHead(ctx, top_x, top_y, x2, y2, bottom_x, bottom_y);\n }\n\n if (config.draw_start_arrow || both_arrows) {\n angle1 = line_angle + config.arrowhead_angle;\n top_x = x1 + Math.cos(angle1) * h;\n top_y = y1 + Math.sin(angle1) * h;\n\n angle2 = line_angle - config.arrowhead_angle;\n bottom_x = x1 + Math.cos(angle2) * h;\n bottom_y = y1 + Math.sin(angle2) * h;\n\n drawArrowHead(ctx, top_x, top_y, x1, y1, bottom_x, bottom_y);\n }\n}\n\nexport class StaveLine extends Element {\n // Text Positioning\n static get TextVerticalPosition() {\n return {\n TOP: 1,\n BOTTOM: 2,\n };\n }\n\n static get TextJustification() {\n return {\n LEFT: 1,\n CENTER: 2,\n RIGHT: 3,\n };\n }\n\n // Initialize the StaveLine with the given `notes`.\n //\n // `notes` is a struct that has:\n //\n // ```\n // {\n // first_note: Note,\n // last_note: Note,\n // first_indices: [n1, n2, n3],\n // last_indices: [n1, n2, n3]\n // }\n // ```\n constructor(notes) {\n super();\n this.setAttribute('type', 'StaveLine');\n\n this.notes = notes;\n\n this.text = '';\n\n this.font = {\n family: 'Arial',\n size: 10,\n weight: '',\n };\n\n this.render_options = {\n // Space to add to the left or the right\n padding_left: 4,\n padding_right: 3,\n\n // The width of the line in pixels\n line_width: 1,\n // An array of line/space lengths. Unsupported with Raphael (SVG)\n line_dash: null,\n // Can draw rounded line end, instead of a square. Unsupported with Raphael (SVG)\n rounded_end: true,\n // The color of the line and arrowheads\n color: null,\n\n // Flags to draw arrows on each end of the line\n draw_start_arrow: false,\n draw_end_arrow: false,\n\n // The length of the arrowhead sides\n arrowhead_length: 10,\n // The angle of the arrowhead\n arrowhead_angle: Math.PI / 8,\n\n // The position of the text\n text_position_vertical: StaveLine.TextVerticalPosition.TOP,\n text_justification: StaveLine.TextJustification.CENTER,\n };\n\n this.setNotes(notes);\n }\n\n // Set the font for the `StaveLine` text\n setFont(font) { this.font = font; return this; }\n // The the annotation for the `StaveLine`\n setText(text) { this.text = text; return this; }\n\n // Set the notes for the `StaveLine`\n setNotes(notes) {\n if (!notes.first_note && !notes.last_note) {\n throw new Vex.RuntimeError(\n 'BadArguments', 'Notes needs to have either first_note or last_note set.'\n );\n }\n\n if (!notes.first_indices) notes.first_indices = [0];\n if (!notes.last_indices) notes.last_indices = [0];\n\n if (notes.first_indices.length !== notes.last_indices.length) {\n throw new Vex.RuntimeError(\n 'BadArguments', 'Connected notes must have similar index sizes'\n );\n }\n\n // Success. Lets grab 'em notes.\n this.first_note = notes.first_note;\n this.first_indices = notes.first_indices;\n this.last_note = notes.last_note;\n this.last_indices = notes.last_indices;\n return this;\n }\n\n // Apply the style of the `StaveLine` to the context\n applyLineStyle() {\n const ctx = this.checkContext();\n const render_options = this.render_options;\n\n if (render_options.line_dash) {\n ctx.setLineDash(render_options.line_dash);\n }\n\n if (render_options.line_width) {\n ctx.setLineWidth(render_options.line_width);\n }\n\n if (render_options.rounded_end) {\n ctx.setLineCap('round');\n } else {\n ctx.setLineCap('square');\n }\n }\n\n // Apply the text styling to the context\n applyFontStyle() {\n const ctx = this.checkContext();\n\n if (this.font) {\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n }\n\n if (this.render_options.color) {\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n }\n }\n\n // Renders the `StaveLine` on the context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n\n const first_note = this.first_note;\n const last_note = this.last_note;\n const render_options = this.render_options;\n\n ctx.save();\n this.applyLineStyle();\n\n // Cycle through each set of indices and draw lines\n let start_position;\n let end_position;\n this.first_indices.forEach((first_index, i) => {\n const last_index = this.last_indices[i];\n\n // Get initial coordinates for the start/end of the line\n start_position = first_note.getModifierStartXY(2, first_index);\n end_position = last_note.getModifierStartXY(1, last_index);\n const upwards_slope = start_position.y > end_position.y;\n\n // Adjust `x` coordinates for modifiers\n start_position.x += first_note.getMetrics().modRightPx + render_options.padding_left;\n end_position.x -= last_note.getMetrics().modLeftPx + render_options.padding_right;\n\n\n // Adjust first `x` coordinates for displacements\n const notehead_width = first_note.getGlyph().getWidth();\n const first_displaced = first_note.getKeyProps()[first_index].displaced;\n if (first_displaced && first_note.getStemDirection() === 1) {\n start_position.x += notehead_width + render_options.padding_left;\n }\n\n // Adjust last `x` coordinates for displacements\n const last_displaced = last_note.getKeyProps()[last_index].displaced;\n if (last_displaced && last_note.getStemDirection() === -1) {\n end_position.x -= notehead_width + render_options.padding_right;\n }\n\n // Adjust y position better if it's not coming from the center of the note\n start_position.y += upwards_slope ? -3 : 1;\n end_position.y += upwards_slope ? 2 : 0;\n\n drawArrowLine(ctx, start_position, end_position, this.render_options);\n });\n\n ctx.restore();\n\n // Determine the x coordinate where to start the text\n const text_width = ctx.measureText(this.text).width;\n const justification = render_options.text_justification;\n let x = 0;\n if (justification === StaveLine.TextJustification.LEFT) {\n x = start_position.x;\n } else if (justification === StaveLine.TextJustification.CENTER) {\n const delta_x = (end_position.x - start_position.x);\n const center_x = (delta_x / 2) + start_position.x;\n x = center_x - (text_width / 2);\n } else if (justification === StaveLine.TextJustification.RIGHT) {\n x = end_position.x - text_width;\n }\n\n // Determine the y value to start the text\n let y;\n const vertical_position = render_options.text_position_vertical;\n if (vertical_position === StaveLine.TextVerticalPosition.TOP) {\n y = first_note.getStave().getYForTopText();\n } else if (vertical_position === StaveLine.TextVerticalPosition.BOTTOM) {\n y = first_note.getStave().getYForBottomText(Flow.TEXT_HEIGHT_OFFSET_HACK);\n }\n\n // Draw the text\n ctx.save();\n this.applyFontStyle();\n ctx.fillText(this.text, x, y);\n ctx.restore();\n\n return this;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements different types of pedal markings. These notation\n// elements indicate to the performer when to depress and release the a pedal.\n//\n// In order to create \"Sostenuto\", and \"una corda\" markings, you must set\n// custom text for the release/depress pedal markings.\n\nimport { Vex } from './vex';\nimport { Element } from './element';\nimport { Glyph } from './glyph';\n\n// To enable logging for this class. Set `Vex.Flow.PedalMarking.DEBUG` to `true`.\nfunction L(...args) { if (PedalMarking.DEBUG) Vex.L('Vex.Flow.PedalMarking', args); }\n\n// Draws a pedal glyph with the provided `name` on a rendering `context`\n// at the coordinates `x` and `y. Takes into account the glyph data\n// coordinate shifts.\nfunction drawPedalGlyph(name, context, x, y, point) {\n const glyph_data = PedalMarking.GLYPHS[name];\n const glyph = new Glyph(glyph_data.code, point, { category: 'pedalMarking' });\n glyph.render(context, x + glyph_data.x_shift, y + glyph_data.y_shift);\n}\n\nexport class PedalMarking extends Element {\n // Glyph data\n static get GLYPHS() {\n return {\n 'pedal_depress': {\n code: 'keyboardPedalPed',\n x_shift: -10,\n y_shift: 0,\n },\n 'pedal_release': {\n code: 'keyboardPedalUp',\n x_shift: -2,\n y_shift: 3,\n },\n };\n }\n\n static get Styles() {\n return {\n TEXT: 1,\n BRACKET: 2,\n MIXED: 3,\n };\n }\n\n static get StylesString() {\n return {\n text: PedalMarking.Styles.TEXT,\n bracket: PedalMarking.Styles.BRACKET,\n mixed: PedalMarking.Styles.MIXED,\n };\n }\n\n // Create a sustain pedal marking. Returns the defaults PedalMarking.\n // Which uses the traditional \"Ped\" and \"*\"\" markings.\n static createSustain(notes) {\n const pedal = new PedalMarking(notes);\n return pedal;\n }\n\n // Create a sostenuto pedal marking\n static createSostenuto(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setStyle(PedalMarking.Styles.MIXED);\n pedal.setCustomText('Sost. Ped.');\n return pedal;\n }\n\n // Create an una corda pedal marking\n static createUnaCorda(notes) {\n const pedal = new PedalMarking(notes);\n pedal.setStyle(PedalMarking.Styles.TEXT);\n pedal.setCustomText('una corda', 'tre corda');\n return pedal;\n }\n\n // ## Prototype Methods\n constructor(notes) {\n super();\n this.setAttribute('type', 'PedalMarking');\n\n this.notes = notes;\n this.style = PedalMarking.TEXT;\n this.line = 0;\n\n // Custom text for the release/depress markings\n this.custom_depress_text = '';\n this.custom_release_text = '';\n\n this.font = {\n family: 'Times New Roman',\n size: 12,\n weight: 'italic bold',\n };\n\n this.render_options = {\n bracket_height: 10,\n text_margin_right: 6,\n bracket_line_width: 1,\n color: 'black',\n };\n }\n\n // Set custom text for the `depress`/`release` pedal markings. No text is\n // set if the parameter is falsy.\n setCustomText(depress, release) {\n this.custom_depress_text = depress || '';\n this.custom_release_text = release || '';\n return this;\n }\n\n // Set the pedal marking style\n setStyle(style) {\n if (style < 1 && style > 3) {\n throw new Vex.RERR('InvalidParameter', 'The style must be one found in PedalMarking.Styles');\n }\n\n this.style = style;\n return this;\n }\n\n // Set the staff line to render the markings on\n setLine(line) { this.line = line; return this; }\n\n // Draw the bracket based pedal markings\n drawBracketed() {\n const ctx = this.context;\n let is_pedal_depressed = false;\n let prev_x;\n let prev_y;\n const pedal = this;\n\n // Iterate through each note\n this.notes.forEach((note, index, notes) => {\n // Each note triggers the opposite pedal action\n is_pedal_depressed = !is_pedal_depressed;\n\n // Get the initial coordinates for the note\n const x = note.getAbsoluteX();\n const y = note.getStave().getYForBottomText(pedal.line + 3);\n\n // Throw if current note is positioned before the previous note\n if (x < prev_x) {\n throw new Vex.RERR(\n 'InvalidConfiguration', 'The notes provided must be in order of ascending x positions'\n );\n }\n\n // Determine if the previous or next note are the same\n // as the current note. We need to keep track of this for\n // when adjustments are made for the release+depress action\n const next_is_same = notes[index + 1] === note;\n const prev_is_same = notes[index - 1] === note;\n\n let x_shift = 0;\n const point = this.musicFont.lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n\n if (is_pedal_depressed) {\n // Adjustment for release+depress\n x_shift = prev_is_same ? 5 : 0;\n\n if (pedal.style === PedalMarking.Styles.MIXED && !prev_is_same) {\n // For MIXED style, start with text instead of bracket\n if (pedal.custom_depress_text) {\n // If we have custom text, use instead of the default \"Ped\" glyph\n const text_width = ctx.measureText(pedal.custom_depress_text).width;\n ctx.fillText(pedal.custom_depress_text, x - (text_width / 2), y);\n x_shift = (text_width / 2) + pedal.render_options.text_margin_right;\n } else {\n // Render the Ped glyph in position\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n x_shift = 20 + pedal.render_options.text_margin_right;\n }\n } else {\n // Draw start bracket\n ctx.beginPath();\n ctx.moveTo(x, y - pedal.render_options.bracket_height);\n ctx.lineTo(x + x_shift, y);\n ctx.stroke();\n ctx.closePath();\n }\n } else {\n // Adjustment for release+depress\n x_shift = next_is_same ? -5 : 0;\n\n // Draw end bracket\n ctx.beginPath();\n ctx.moveTo(prev_x, prev_y);\n ctx.lineTo(x + x_shift, y);\n ctx.lineTo(x, y - pedal.render_options.bracket_height);\n ctx.stroke();\n ctx.closePath();\n }\n\n // Store previous coordinates\n prev_x = x + x_shift;\n prev_y = y;\n });\n }\n\n // Draw the text based pedal markings. This defaults to the traditional\n // \"Ped\" and \"*\"\" symbols if no custom text has been provided.\n drawText() {\n const ctx = this.context;\n let is_pedal_depressed = false;\n const pedal = this;\n\n // Iterate through each note, placing glyphs or custom text accordingly\n this.notes.forEach(note => {\n is_pedal_depressed = !is_pedal_depressed;\n const stave = note.getStave();\n const x = note.getAbsoluteX();\n const y = stave.getYForBottomText(pedal.line + 3);\n\n const point = this.musicFont.lookupMetric(`pedalMarking.${is_pedal_depressed ? 'down' : 'up'}.point`);\n\n let text_width = 0;\n if (is_pedal_depressed) {\n if (pedal.custom_depress_text) {\n text_width = ctx.measureText(pedal.custom_depress_text).width;\n ctx.fillText(pedal.custom_depress_text, x - (text_width / 2), y);\n } else {\n drawPedalGlyph('pedal_depress', ctx, x, y, point);\n }\n } else {\n if (pedal.custom_release_text) {\n text_width = ctx.measureText(pedal.custom_release_text).width;\n ctx.fillText(pedal.custom_release_text, x - (text_width / 2), y);\n } else {\n drawPedalGlyph('pedal_release', ctx, x, y, point);\n }\n }\n });\n }\n\n // Render the pedal marking in position on the rendering context\n draw() {\n const ctx = this.checkContext();\n this.setRendered();\n\n ctx.save();\n ctx.setStrokeStyle(this.render_options.color);\n ctx.setFillStyle(this.render_options.color);\n ctx.setFont(this.font.family, this.font.size, this.font.weight);\n\n L('Rendering Pedal Marking');\n\n if (this.style === PedalMarking.Styles.BRACKET || this.style === PedalMarking.Styles.MIXED) {\n ctx.setLineWidth(this.render_options.bracket_line_width);\n this.drawBracketed();\n } else if (this.style === PedalMarking.Styles.TEXT) {\n this.drawText();\n }\n\n ctx.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Cyril Silverman\n//\n// ## Description\n//\n// This file implement `TextBrackets` which extend between two notes.\n// The octave transposition markings (8va, 8vb, 15va, 15vb) can be created\n// using this class.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Element } from './element';\nimport { Renderer } from './renderer';\n\n// To enable logging for this class. Set `Vex.Flow.TextBracket.DEBUG` to `true`.\nfunction L(...args) { if (TextBracket.DEBUG) Vex.L('Vex.Flow.TextBracket', args); }\n\nexport class TextBracket extends Element {\n // FIXME: Modifier.Position is singular while this is plural, make consistent\n static get Positions() {\n return {\n TOP: 1,\n BOTTOM: -1,\n };\n }\n\n static get PositionString() {\n return {\n top: TextBracket.Positions.TOP,\n bottom: TextBracket.Positions.BOTTOM,\n };\n }\n\n constructor({\n start,\n stop,\n text = '',\n superscript = '',\n position = TextBracket.Positions.TOP,\n }) {\n super();\n this.setAttribute('type', 'TextBracket');\n\n this.start = start;\n this.stop = stop;\n\n this.text = text;\n this.superscript = superscript;\n\n this.position = typeof position === 'string'\n ? TextBracket.PositionString[position]\n : position;\n\n this.line = 1;\n\n this.font = {\n family: 'Serif',\n size: 15,\n weight: 'italic',\n };\n\n this.render_options = {\n dashed: true,\n dash: [5],\n color: 'black',\n line_width: 1,\n show_bracket: true,\n bracket_height: 8,\n\n // In the BOTTOM position, the bracket line can extend\n // under the superscript.\n underline_superscript: true,\n };\n }\n\n // Apply the text backet styling to the provided `context`\n applyStyle(context) {\n // Apply style for the octave bracket\n context.setFont(this.font.family, this.font.size, this.font.weight);\n context.setStrokeStyle(this.render_options.color);\n context.setFillStyle(this.render_options.color);\n context.setLineWidth(this.render_options.line_width);\n\n return this;\n }\n\n // Set whether the bracket line should be `dashed`. You can also\n // optionally set the `dash` pattern by passing in an array of numbers\n setDashed(dashed, dash) {\n this.render_options.dashed = dashed;\n if (dash) this.render_options.dash = dash;\n return this;\n }\n\n // Set the font for the text\n setFont(font) {\n // We use Object.assign to support partial updates to the font object\n this.font = { ...this.font, ...font };\n return this;\n }\n // Set the rendering `context` for the octave bracket\n setLine(line) { this.line = line; return this; }\n\n // Draw the octave bracket on the rendering context\n draw() {\n const ctx = this.context;\n this.setRendered();\n\n let y = 0;\n switch (this.position) {\n case TextBracket.Positions.TOP:\n y = this.start.getStave().getYForTopText(this.line);\n break;\n case TextBracket.Positions.BOTTOM:\n y = this.start.getStave().getYForBottomText(this.line + Flow.TEXT_HEIGHT_OFFSET_HACK);\n break;\n default:\n throw new Vex.RERR('InvalidPosition', `The position ${this.position} is invalid`);\n }\n\n // Get the preliminary start and stop coordintates for the bracket\n const start = { x: this.start.getAbsoluteX(), y };\n const stop = { x: this.stop.getAbsoluteX(), y };\n\n L('Rendering TextBracket: start:', start, 'stop:', stop, 'y:', y);\n\n const bracket_height = this.render_options.bracket_height * this.position;\n\n ctx.save();\n this.applyStyle(ctx);\n\n // Draw text\n ctx.fillText(this.text, start.x, start.y);\n\n // Get the width and height for the octave number\n const main_width = ctx.measureText(this.text).width;\n const main_height = ctx.measureText('M').width;\n\n // Calculate the y position for the super script\n const super_y = start.y - (main_height / 2.5);\n\n // Draw the superscript\n ctx.setFont(this.font.family, this.font.size / 1.4, this.font.weight);\n ctx.fillText(this.superscript, start.x + main_width + 1, super_y);\n\n // Determine width and height of the superscript\n const superscript_width = ctx.measureText(this.superscript).width;\n const super_height = ctx.measureText('M').width;\n\n // Setup initial coordinates for the bracket line\n let start_x = start.x;\n let line_y = super_y;\n const end_x = stop.x + this.stop.getGlyph().getWidth();\n\n // Adjust x and y coordinates based on position\n if (this.position === TextBracket.Positions.TOP) {\n start_x += main_width + superscript_width + 5;\n line_y -= super_height / 2.7;\n } else if (this.position === TextBracket.Positions.BOTTOM) {\n line_y += super_height / 2.7;\n start_x += main_width + 2;\n\n if (!this.render_options.underline_superscript) {\n start_x += superscript_width;\n }\n }\n\n if (this.render_options.dashed) {\n // Main line\n Renderer.drawDashedLine(\n ctx,\n start_x,\n line_y,\n end_x,\n line_y,\n this.render_options.dash\n );\n // Ending Bracket\n if (this.render_options.show_bracket) {\n Renderer.drawDashedLine(\n ctx,\n end_x,\n line_y + (1 * this.position),\n end_x,\n line_y + bracket_height,\n this.render_options.dash\n );\n }\n } else {\n ctx.beginPath();\n ctx.moveTo(start_x, line_y);\n // Main line\n ctx.lineTo(end_x, line_y);\n if (this.render_options.show_bracket) {\n // Ending bracket\n ctx.lineTo(end_x, line_y + bracket_height);\n }\n ctx.stroke();\n ctx.closePath();\n }\n\n ctx.restore();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// A `BarNote` is used to render bar lines (from `barline.js`). `BarNote`s can\n// be added to a voice and rendered in the middle of a stave. Since it has no\n// duration, it consumes no `tick`s, and is dealt with appropriately by the formatter.\n//\n// See `tests/barnote_tests.js` for usage examples.\n\nimport { Vex } from './vex';\nimport { Note } from './note';\nimport { Barline } from './stavebarline';\n\n// To enable logging for this class. Set `Vex.Flow.BarNote.DEBUG` to `true`.\nfunction L(...args) { if (BarNote.DEBUG) Vex.L('Vex.Flow.BarNote', args); }\n\nexport class BarNote extends Note {\n constructor(type = Barline.type.SINGLE) {\n super({ duration: 'b' });\n this.setAttribute('type', 'BarNote');\n\n this.metrics = {\n widths: {},\n };\n\n const TYPE = Barline.type;\n this.metrics.widths = {\n [TYPE.SINGLE]: 8,\n [TYPE.DOUBLE]: 12,\n [TYPE.END]: 15,\n [TYPE.REPEAT_BEGIN]: 14,\n [TYPE.REPEAT_END]: 14,\n [TYPE.REPEAT_BOTH]: 18,\n [TYPE.NONE]: 0,\n };\n\n // Tell the formatter that bar notes have no duration.\n this.ignore_ticks = true;\n this.setType(type);\n }\n\n // Get and set the type of Bar note. `type` must be one of `Vex.Flow.Barline.type`.\n getType() { return this.type; }\n setType(type) {\n this.type = typeof(type) === 'string'\n ? Barline.typeString[type]\n : type;\n\n // Set width to width of relevant `Barline`.\n this.setWidth(this.metrics.widths[this.type]);\n return this;\n }\n\n getBoundingBox() {\n return super.getBoundingBox();\n }\n\n addToModifierContext() {\n /* overridden to ignore */\n return this;\n }\n\n preFormat() {\n /* overridden to ignore */\n this.setPreFormatted(true);\n return this;\n }\n\n // Render note to stave.\n draw() {\n this.checkContext();\n if (!this.stave) throw new Vex.RERR('NoStave', \"Can't draw without a stave.\");\n L('Rendering bar line at: ', this.getAbsoluteX());\n const barline = new Barline(this.type);\n barline.setX(this.getAbsoluteX());\n barline.draw(this.stave);\n this.setRendered();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n\nimport { Vex } from './vex';\nimport { StemmableNote } from './stemmablenote';\n\nexport class GhostNote extends StemmableNote {\n /** @constructor */\n constructor(parameter) {\n // Sanity check\n if (!parameter) {\n throw new Vex.RuntimeError('BadArguments',\n 'Ghost note must have valid initialization data to identify ' +\n 'duration.');\n }\n\n let note_struct;\n\n // Preserve backwards-compatibility\n if (typeof (parameter) === 'string') {\n note_struct = { duration: parameter };\n } else if (typeof (parameter) === 'object') {\n note_struct = parameter;\n } else {\n throw new Vex.RuntimeError('BadArguments',\n 'Ghost note must have valid initialization data to identify ' +\n 'duration.');\n }\n\n super(note_struct);\n this.setAttribute('type', 'GhostNote');\n\n // Note properties\n this.setWidth(0);\n }\n\n isRest() { return true; }\n\n setStave(stave) {\n super.setStave(stave);\n }\n\n addToModifierContext() { /* intentionally overridden */ return this; }\n\n preFormat() {\n this.setPreFormatted(true);\n return this;\n }\n\n draw() {\n if (!this.stave) throw new Vex.RERR('NoStave', \"Can't draw without a stave.\");\n\n // Draw the modifiers\n this.setRendered();\n for (let i = 0; i < this.modifiers.length; ++i) {\n const modifier = this.modifiers[i];\n modifier.setContext(this.context);\n modifier.drawWithStyle();\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// Author: Mike Corrigan \n//\n// This class implements tremolo notation.\n\nimport { Vex } from './vex';\nimport { Modifier } from './modifier';\nimport { Glyph } from './glyph';\nimport { GraceNote } from './gracenote';\nimport { Stem } from './stem';\n\nexport class Tremolo extends Modifier {\n static get CATEGORY() { return 'tremolo'; }\n\n constructor(num) {\n super();\n this.setAttribute('type', 'Tremolo');\n\n this.num = num;\n this.note = null;\n this.index = null;\n this.position = Modifier.Position.CENTER;\n this.code = 'tremolo1';\n }\n\n getCategory() { return Tremolo.CATEGORY; }\n\n draw() {\n this.checkContext();\n\n if (!(this.note && this.index != null)) {\n throw new Vex.RERR('NoAttachedNote', \"Can't draw Tremolo without a note and index.\");\n }\n\n this.setRendered();\n const stemDirection = this.note.getStemDirection();\n\n const start = this.note.getModifierStartXY(this.position, this.index);\n let x = start.x;\n const isGraceNote = this.note.getCategory() === 'gracenotes';\n const scale = isGraceNote ? GraceNote.SCALE : 1;\n const category = `tremolo.${isGraceNote ? 'grace' : 'default'}`;\n\n this.y_spacing = this.musicFont.lookupMetric(`${category}.spacing`) * stemDirection;\n const height = this.num * this.y_spacing;\n let y = this.note.stem.getExtents().baseY - height;\n\n if (stemDirection < 0) {\n y += this.musicFont.lookupMetric(`${category}.offsetYStemDown`) * scale;\n } else {\n y += this.musicFont.lookupMetric(`${category}.offsetYStemUp`) * scale;\n }\n\n this.font = {\n family: 'Arial',\n size: 16 * scale,\n weight: '',\n };\n\n this.render_options = {\n font_scale: this.musicFont.lookupMetric(`${category}.point`),\n stroke_px: 3,\n stroke_spacing: 10 * scale,\n };\n\n x += this.musicFont.lookupMetric(`${category}.offsetXStem${stemDirection === Stem.UP ? 'Up' : 'Down'}`);\n for (let i = 0; i < this.num; ++i) {\n Glyph.renderGlyph(this.context, x, y, this.render_options.font_scale, this.code, { category });\n y += this.y_spacing;\n }\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// ## Description\n//\n// This file implements the `Crescendo` object which draws crescendos and\n// decrescendo dynamics markings. A `Crescendo` is initialized with a\n// duration and formatted as part of a `Voice` like any other `Note`\n// type in VexFlow. This object would most likely be formatted in a Voice\n// with `TextNotes` - which are used to represent other dynamics markings.\n\nimport { Vex } from './vex';\nimport { Note } from './note';\nimport { TickContext } from './tickcontext';\n\n// To enable logging for this class. Set `Vex.Flow.Crescendo.DEBUG` to `true`.\nfunction L(...args) { if (Crescendo.DEBUG) Vex.L('Vex.Flow.Crescendo', args); }\n\n// Private helper to draw the hairpin\nfunction renderHairpin(ctx, params) {\n const begin_x = params.begin_x;\n const end_x = params.end_x;\n const y = params.y;\n const half_height = params.height / 2;\n\n ctx.beginPath();\n\n if (params.reverse) {\n ctx.moveTo(begin_x, y - half_height);\n ctx.lineTo(end_x, y);\n ctx.lineTo(begin_x, y + half_height);\n } else {\n ctx.moveTo(end_x, y - half_height);\n ctx.lineTo(begin_x, y);\n ctx.lineTo(end_x, y + half_height);\n }\n\n ctx.stroke();\n ctx.closePath();\n}\n\nexport class Crescendo extends Note {\n // Initialize the crescendo's properties\n constructor(note_struct) {\n super(note_struct);\n this.setAttribute('type', 'Crescendo');\n\n // Whether the object is a decrescendo\n this.decrescendo = false;\n\n // The staff line to be placed on\n this.line = note_struct.line || 0;\n\n // The height at the open end of the cresc/decresc\n this.height = 15;\n\n Vex.Merge(this.render_options, {\n // Extensions to the length of the crescendo on either side\n extend_left: 0,\n extend_right: 0,\n // Vertical shift\n y_shift: 0,\n });\n }\n\n // Set the line to center the element on\n setLine(line) { this.line = line; return this; }\n\n // Set the full height at the open end\n setHeight(height) { this.height = height; return this; }\n\n // Set whether the sign should be a descresendo by passing a bool\n // to `decresc`\n setDecrescendo(decresc) {\n this.decrescendo = decresc;\n return this;\n }\n\n // Preformat the note\n preFormat() { this.preFormatted = true; return this; }\n\n // Render the Crescendo object onto the canvas\n draw() {\n this.checkContext();\n this.setRendered();\n\n const tick_context = this.getTickContext();\n const next_context = TickContext.getNextContext(tick_context);\n\n const begin_x = this.getAbsoluteX();\n const end_x = next_context ? next_context.getX() : this.stave.x + this.stave.width;\n const y = this.stave.getYForLine(this.line + (-3)) + 1;\n\n L(\n 'Drawing ',\n this.decrescendo ? 'decrescendo ' : 'crescendo ',\n this.height,\n 'x',\n begin_x - end_x\n );\n\n renderHairpin(this.context, {\n begin_x: begin_x - this.render_options.extend_left,\n end_x: end_x + this.render_options.extend_right,\n y: y + this.render_options.y_shift,\n height: this.height,\n reverse: this.decrescendo,\n });\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { Note } from './note';\n\nexport class GlyphNote extends Note {\n constructor(glyph, noteStruct, options) {\n super(noteStruct);\n this.options = {\n ignoreTicks: false,\n line: 2,\n ...options\n };\n this.setAttribute('type', 'GlyphNote');\n\n // Note properties\n this.ignore_ticks = this.options.ignoreTicks;\n if (glyph) {\n this.setGlyph(glyph);\n }\n }\n\n setGlyph(glyph) {\n this.glyph = glyph;\n this.setWidth(this.glyph.getMetrics().width);\n return this;\n }\n\n getBoundingBox() {\n return this.glyph.getBoundingBox();\n }\n\n /*\n addToModifierContext() {\n return this;\n }\n */\n\n preFormat() {\n this.setPreFormatted(true);\n return this;\n }\n\n draw() {\n this.stave.checkContext();\n this.setRendered();\n\n // Context is set when setStave is called on Note\n if (!this.glyph.getContext()) {\n this.glyph.setContext(this.context);\n }\n\n this.glyph.setStave(this.stave);\n this.glyph.setYShift(this.stave.getYForLine(this.options.line) - this.stave.getYForGlyphs());\n\n const x = this.isCenterAligned() ? this.getAbsoluteX() - (this.getWidth() / 2) : this.getAbsoluteX();\n this.glyph.renderToStave(x);\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { GlyphNote } from './glyphnote';\nimport { Glyph } from './glyph';\n\nexport class RepeatNote extends GlyphNote {\n constructor(type, noteStruct, options) {\n // Smufl Codes\n const CODES = {\n '1': 'repeat1Bar',\n '2': 'repeat2Bars',\n '4': 'repeat4Bars',\n 'slash': 'repeatBarSlash',\n };\n\n noteStruct = {\n duration: 'q',\n align_center: type !== 'slash',\n ...noteStruct,\n };\n\n super(null, { duration: 'q', align_center: type !== 'slash', ...noteStruct }, options);\n this.setAttribute('type', 'RepeatNote');\n\n const glyphCode = CODES[type] || 'repeat1Bar';\n const glyph = new Glyph(glyphCode, this.musicFont.lookupMetric('repeatNote.point', 40), { category: 'repeatNote' });\n this.setGlyph(glyph);\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// A generic text parsing class for VexFlow.\n\nimport { Vex } from './vex';\n\n// To enable logging for this class. Set `Vex.Flow.Parser.DEBUG` to `true`.\nfunction L(...args) { if (Parser.DEBUG) Vex.L('Vex.Flow.Parser', args); }\n\nexport const X = Vex.MakeException('ParserError');\n\n// Converts parser results into an easy to reference list that can be\n// used in triggers.\nfunction flattenMatches(results) {\n if (results.matchedString !== undefined) return results.matchedString;\n if (results.results) return flattenMatches(results.results);\n if (results.length === 1) return flattenMatches(results[0]);\n if (results.length === 0) return null;\n return results.map(flattenMatches);\n}\n\n// This is the base parser class. Given an arbitrary context-free grammar, it\n// can parse any line and execute code when specific rules are met (e.g.,\n// when a string is terminated.)\nexport class Parser {\n // For an example of a simple grammar, take a look at tests/parser_tests.js or\n // the EasyScore grammar in easyscore.js.\n constructor(grammar) {\n this.grammar = grammar;\n }\n\n // Parse `line` using current grammar. Returns {success: true} if the\n // line parsed correctly, otherwise returns `{success: false, errorPos: N}`\n // where `errorPos` is the location of the error in the string.\n parse(line) {\n this.line = line;\n this.pos = 0;\n this.errorPos = -1;\n const results = this.expect(this.grammar.begin());\n results.errorPos = this.errorPos;\n return results;\n }\n\n matchFail(returnPos) {\n if (this.errorPos === -1) this.errorPos = this.pos;\n this.pos = returnPos;\n }\n\n matchSuccess() {\n this.errorPos = -1;\n }\n\n // Look for `token` in this.line[this.pos], and return success\n // if one is found. `token` is specified as a regular expression.\n matchToken(token, noSpace = false) {\n const regexp = noSpace\n ? new RegExp('^((' + token + '))')\n : new RegExp('^((' + token + ')\\\\s*)');\n const workingLine = this.line.slice(this.pos);\n const result = workingLine.match(regexp);\n if (result !== null) {\n return {\n success: true,\n matchedString: result[2],\n incrementPos: result[1].length,\n pos: this.pos,\n };\n } else {\n return {\n success: false,\n pos: this.pos,\n };\n }\n }\n\n // Execute rule to match a sequence of tokens (or rules). If `maybe` is\n // set, then return success even if the token is not found, but reset\n // the position before exiting.\n expectOne(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n\n let allMatches = true;\n let oneMatch = false;\n maybe = (maybe === true) || (rule.maybe === true);\n\n // Execute all sub rules in sequence.\n for (let i = 0; i < rule.expect.length; i++) {\n const next = rule.expect[i];\n const localPos = this.pos;\n const result = this.expect(next);\n\n // If `rule.or` is set, then return success if any one\n // of the subrules match, else all subrules must match.\n if (result.success) {\n results.push(result);\n oneMatch = true;\n if (rule.or) break;\n } else {\n allMatches = false;\n if (!rule.or) {\n this.pos = localPos;\n break;\n }\n }\n }\n\n const gotOne = (rule.or && oneMatch) || allMatches;\n const success = gotOne || (maybe === true);\n if (maybe && !gotOne) this.pos = pos;\n if (success) this.matchSuccess(); else this.matchFail(pos);\n return { success, results, numMatches: gotOne ? 1 : 0 };\n }\n\n // Try to match multiple (one or more) instances of the rule. If `maybe` is set,\n // then a failed match is also a success (but the position is reset).\n expectOneOrMore(rule, maybe = false) {\n const results = [];\n const pos = this.pos;\n let numMatches = 0;\n let more = true;\n\n do {\n const result = this.expectOne(rule);\n if (result.success) {\n numMatches++;\n results.push(result.results);\n } else {\n more = false;\n }\n } while (more);\n\n const success = (numMatches > 0) || (maybe === true);\n if (maybe && !(numMatches > 0)) this.pos = pos;\n if (success) this.matchSuccess(); else this.matchFail(pos);\n return { success, results, numMatches };\n }\n\n // Match zero or more instances of `rule`. Offloads to `expectOneOrMore`.\n expectZeroOrMore(rule) {\n return this.expectOneOrMore(rule, true);\n }\n\n // Execute the rule produced by the provided the `rules` function. This\n // ofloads to one of the above matchers and consolidates the results. It is also\n // responsible for executing any code triggered by the rule (in `rule.run`.)\n expect(rules) {\n L('Evaluating rules:', rules);\n let result;\n if (!rules) {\n throw new X('Invalid Rule: ' + rules, rules);\n }\n\n // Get rule from Grammar class.\n const rule = rules.bind(this.grammar)();\n\n if (rule.token) {\n // Base case: parse the regex and throw an error if the\n // line doesn't match.\n result = this.matchToken(rule.token, (rule.noSpace === true));\n if (result.success) {\n // Token match! Update position and throw away parsed portion\n // of string.\n this.pos += result.incrementPos;\n }\n } else if (rule.expect) {\n if (rule.oneOrMore) {\n result = this.expectOneOrMore(rule);\n } else if (rule.zeroOrMore) {\n result = this.expectZeroOrMore(rule);\n } else {\n result = this.expectOne(rule);\n }\n } else {\n throw new X('Bad grammar! No `token` or `expect` property', rule);\n }\n\n // If there's a trigger attached to this rule, then pull it.\n result.matches = [];\n if (result.results) result.results.forEach(r => result.matches.push(flattenMatches(r)));\n if (rule.run && result.success) rule.run(result);\n return result;\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements a parser for a simple language to generate\n// VexFlow objects.\n\n/* eslint max-classes-per-file: \"off\" */\n\nimport { Vex } from './vex';\nimport { StaveNote } from './stavenote';\nimport { Parser } from './parser';\nimport { Articulation } from './articulation';\n\n// To enable logging for this class. Set `Vex.Flow.EasyScore.DEBUG` to `true`.\nfunction L(...args) { if (EasyScore.DEBUG) Vex.L('Vex.Flow.EasyScore', args); }\n\nexport const X = Vex.MakeException('EasyScoreError');\n\nclass Grammar {\n constructor(builder) {\n this.builder = builder;\n }\n\n begin() { return this.LINE; }\n\n LINE() {\n return {\n expect: [this.PIECE, this.PIECES, this.EOL],\n };\n }\n PIECE() {\n return {\n expect: [this.CHORDORNOTE, this.PARAMS],\n run: () => this.builder.commitPiece(),\n };\n }\n PIECES() {\n return {\n expect: [this.COMMA, this.PIECE],\n zeroOrMore: true,\n };\n }\n PARAMS() {\n return {\n expect: [this.DURATION, this.TYPE, this.DOTS, this.OPTS],\n };\n }\n CHORDORNOTE() {\n return {\n expect: [this.CHORD, this.SINGLENOTE],\n or: true,\n };\n }\n CHORD() {\n return {\n expect: [this.LPAREN, this.NOTES, this.RPAREN],\n run: (state) => this.builder.addChord(state.matches[1]),\n };\n }\n NOTES() {\n return {\n expect: [this.NOTE],\n oneOrMore: true,\n };\n }\n NOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n };\n }\n SINGLENOTE() {\n return {\n expect: [this.NOTENAME, this.ACCIDENTAL, this.OCTAVE],\n run: (state) =>\n this.builder.addSingleNote(state.matches[0], state.matches[1], state.matches[2]),\n };\n }\n ACCIDENTAL() {\n return {\n expect: [this.ACCIDENTALS],\n maybe: true,\n };\n }\n DOTS() {\n return {\n expect: [this.DOT],\n zeroOrMore: true,\n run: (state) => this.builder.setNoteDots(state.matches[0]),\n };\n }\n TYPE() {\n return {\n expect: [this.SLASH, this.MAYBESLASH, this.TYPES],\n maybe: true,\n run: (state) => this.builder.setNoteType(state.matches[2]),\n };\n }\n DURATION() {\n return {\n expect: [this.SLASH, this.DURATIONS],\n maybe: true,\n run: (state) => this.builder.setNoteDuration(state.matches[1]),\n };\n }\n OPTS() {\n return {\n expect: [this.LBRACKET, this.KEYVAL, this.KEYVALS, this.RBRACKET],\n maybe: true,\n };\n }\n KEYVALS() {\n return {\n expect: [this.COMMA, this.KEYVAL],\n zeroOrMore: true,\n };\n }\n KEYVAL() {\n const unquote = (str) => str.slice(1, -1);\n\n return {\n expect: [this.KEY, this.EQUALS, this.VAL],\n run: (state) => this.builder.addNoteOption(state.matches[0], unquote(state.matches[2])),\n };\n }\n VAL() {\n return {\n expect: [this.SVAL, this.DVAL],\n or: true,\n };\n }\n\n KEY() { return { token: '[a-zA-Z][a-zA-Z0-9]*' }; }\n DVAL() { return { token: '[\"][^\"]*[\"]' }; }\n SVAL() { return { token: \"['][^']*[']\" }; }\n NOTENAME() { return { token: '[a-gA-G]' }; }\n OCTAVE() { return { token: '[0-9]+' }; }\n ACCIDENTALS() { return { token: 'bbs|bb|bss|bs|b|db|d|##|#|n|\\\\+\\\\+-|\\\\+-|\\\\+\\\\+|\\\\+|k|o' }; }\n DURATIONS() { return { token: '[0-9whq]+' }; }\n TYPES() { return { token: '[rRsSxX]' }; }\n LPAREN() { return { token: '[(]' }; }\n RPAREN() { return { token: '[)]' }; }\n COMMA() { return { token: '[,]' }; }\n DOT() { return { token: '[.]' }; }\n SLASH() { return { token: '[/]' }; }\n MAYBESLASH() { return { token: '[/]?' }; }\n EQUALS() { return { token: '[=]' }; }\n LBRACKET() { return { token: '\\\\[' }; }\n RBRACKET() { return { token: '\\\\]' }; }\n EOL() { return { token: '$' }; }\n}\n\nclass Builder {\n constructor(factory) {\n this.factory = factory;\n this.commitHooks = [];\n this.reset();\n }\n\n reset(options = {}) {\n this.options = {\n stem: 'auto',\n clef: 'treble',\n };\n this.elements = {\n notes: [],\n accidentals: [],\n };\n this.rollingDuration = '8';\n this.resetPiece();\n Object.assign(this.options, options);\n }\n\n getFactory() { return this.factory; }\n\n getElements() { return this.elements; }\n\n addCommitHook(commitHook) {\n this.commitHooks.push(commitHook);\n }\n\n resetPiece() {\n L('resetPiece');\n this.piece = {\n chord: [],\n duration: this.rollingDuration,\n dots: 0,\n type: undefined,\n options: {},\n };\n }\n\n setNoteDots(dots) {\n L('setNoteDots:', dots);\n if (dots) this.piece.dots = dots.length;\n }\n\n setNoteDuration(duration) {\n L('setNoteDuration:', duration);\n this.rollingDuration = this.piece.duration = duration || this.rollingDuration;\n }\n\n setNoteType(type) {\n L('setNoteType:', type);\n if (type) this.piece.type = type;\n }\n\n addNoteOption(key, value) {\n L('addNoteOption: key:', key, 'value:', value);\n this.piece.options[key] = value;\n }\n\n addNote(key, accid, octave) {\n L('addNote:', key, accid, octave);\n this.piece.chord.push({ key, accid, octave });\n }\n\n addSingleNote(key, accid, octave) {\n L('addSingleNote:', key, accid, octave);\n this.addNote(key, accid, octave);\n }\n\n addChord(notes) {\n L('startChord');\n if (typeof (notes[0]) !== 'object') {\n this.addSingleNote(notes[0]);\n } else {\n notes.forEach(n => {\n if (n) this.addNote(...n);\n });\n }\n L('endChord');\n }\n\n commitPiece() {\n L('commitPiece');\n const { factory } = this;\n\n if (!factory) return;\n\n const options = { ...this.options, ...this.piece.options };\n const { stem, clef } = options;\n const autoStem = stem.toLowerCase() === 'auto';\n const stemDirection = !autoStem && stem.toLowerCase() === 'up'\n ? StaveNote.STEM_UP\n : StaveNote.STEM_DOWN;\n\n // Build StaveNotes.\n const { chord, duration, dots, type } = this.piece;\n const keys = chord.map(note => note.key + '/' + note.octave);\n const note = factory.StaveNote({\n keys,\n duration,\n dots,\n type,\n clef,\n auto_stem: autoStem,\n });\n if (!autoStem) note.setStemDirection(stemDirection);\n\n // Attach accidentals.\n const accids = chord.map(note => note.accid || null);\n accids.forEach((accid, i) => {\n if (accid) note.addAccidental(i, factory.Accidental({ type: accid }));\n });\n\n // Attach dots.\n for (let i = 0; i < dots; i++) note.addDotToAll();\n\n this.commitHooks.forEach(fn => fn(options, note, this));\n\n this.elements.notes.push(note);\n this.elements.accidentals.concat(accids);\n this.resetPiece();\n }\n}\n\nfunction setId({ id }, note) {\n if (id === undefined) return;\n\n note.setAttribute('id', id);\n}\n\n\nfunction setClass(options, note) {\n if (!options.class) return;\n\n const commaSeparatedRegex = /\\s*,\\s*/;\n\n options.class\n .split(commaSeparatedRegex)\n .forEach(className => note.addClass(className));\n}\n\nexport class EasyScore {\n constructor(options = {}) {\n this.setOptions(options);\n this.defaults = {\n clef: 'treble',\n time: '4/4',\n stem: 'auto',\n };\n }\n\n set(defaults) {\n Object.assign(this.defaults, defaults);\n return this;\n }\n\n setOptions(options) {\n this.options = {\n factory: null,\n builder: null,\n commitHooks: [\n setId,\n setClass,\n Articulation.easyScoreHook,\n ],\n throwOnError: false, ...options\n };\n\n this.factory = this.options.factory;\n this.builder = this.options.builder || new Builder(this.factory);\n this.grammar = new Grammar(this.builder);\n this.parser = new Parser(this.grammar);\n this.options.commitHooks.forEach(commitHook => this.addCommitHook(commitHook));\n return this;\n }\n\n setContext(context) {\n if (this.factory) this.factory.setContext(context);\n return this;\n }\n\n parse(line, options = {}) {\n this.builder.reset(options);\n const result = this.parser.parse(line);\n if (!result.success && this.options.throwOnError) {\n throw new X('Error parsing line: ' + line, result);\n }\n return result;\n }\n\n beam(notes, options = {}) {\n this.factory.Beam({ notes, options });\n return notes;\n }\n\n tuplet(notes, options = {}) {\n this.factory.Tuplet({ notes, options });\n return notes;\n }\n\n notes(line, options = {}) {\n options = { clef: this.defaults.clef, stem: this.defaults.stem, ...options };\n this.parse(line, options);\n return this.builder.getElements().notes;\n }\n\n voice(notes, voiceOptions) {\n voiceOptions = { time: this.defaults.time, ...voiceOptions };\n return this.factory.Voice(voiceOptions).addTickables(notes);\n }\n\n addCommitHook(commitHook) {\n return this.builder.addCommitHook(commitHook);\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n// @author Mohit Cheppudira\n//\n// ## Description\n//\n// This file implements a high level API around VexFlow. It will eventually\n// become the canonical way to use VexFlow.\n//\n// *This API is currently DRAFT*\n\nimport { Vex } from './vex';\nimport { Accidental } from './accidental';\nimport { Articulation } from './articulation';\nimport { Annotation } from './annotation';\nimport { Formatter } from './formatter';\nimport { FretHandFinger } from './frethandfinger';\nimport { StringNumber } from './stringnumber';\nimport { TextDynamics } from './textdynamics';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { Renderer } from './renderer';\nimport { Stave } from './stave';\nimport { StaveTie } from './stavetie';\nimport { StaveLine } from './staveline';\nimport { StaveNote } from './stavenote';\nimport { GlyphNote } from './glyphnote';\nimport { RepeatNote } from './repeatnote';\nimport { StaveConnector } from './staveconnector';\nimport { System } from './system';\nimport { TickContext } from './tickcontext';\nimport { Tuplet } from './tuplet';\nimport { Voice } from './voice';\nimport { Beam } from './beam';\nimport { Curve } from './curve';\nimport { GraceNote } from './gracenote';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { NoteSubGroup } from './notesubgroup';\nimport { EasyScore } from './easyscore';\nimport { TimeSigNote } from './timesignote';\nimport { KeySigNote } from './keysignote';\nimport { ClefNote } from './clefnote';\nimport { PedalMarking } from './pedalmarking';\nimport { TextBracket } from './textbracket';\nimport { VibratoBracket } from './vibratobracket';\nimport { GhostNote } from './ghostnote';\nimport { BarNote } from './barnote';\nimport { TabNote } from './tabnote';\nimport { TabStave } from './tabstave';\nimport { TextNote } from './textnote';\n\n// To enable logging for this class. Set `Vex.Flow.Factory.DEBUG` to `true`.\nfunction L(...args) { if (Factory.DEBUG) Vex.L('Vex.Flow.Factory', args); }\n\nexport const X = Vex.MakeException('FactoryError');\n\nfunction setDefaults(params = {}, defaults) {\n const default_options = defaults.options;\n params = Object.assign(defaults, params);\n params.options = Object.assign(default_options, params.options);\n return params;\n}\n\nexport class Factory {\n constructor(options) {\n L('New factory: ', options);\n const defaults = {\n stave: {\n space: 10,\n },\n renderer: {\n context: null,\n elementId: '',\n backend: Renderer.Backends.SVG,\n width: 500,\n height: 200,\n background: '#FFF',\n },\n font: {\n face: 'Arial',\n point: 10,\n style: '',\n },\n };\n\n this.options = defaults;\n this.setOptions(options);\n }\n\n static newFromElementId(elementId, width = 500, height = 200) {\n return new Factory({ renderer: { elementId, width, height } });\n }\n\n reset() {\n this.renderQ = [];\n this.systems = [];\n this.staves = [];\n this.voices = [];\n this.stave = null; // current stave\n }\n\n getOptions() { return this.options; }\n setOptions(options) {\n for (const key of ['stave', 'renderer', 'font']) {\n Object.assign(this.options[key], options[key]);\n }\n if (this.options.renderer.elementId !== null || this.options.renderer.context) {\n this.initRenderer();\n }\n\n this.reset();\n }\n\n initRenderer() {\n const { elementId, backend, width, height, background } = this.options.renderer;\n if (elementId === '') {\n throw new X('HTML DOM element not set in Factory');\n }\n\n this.context = Renderer.buildContext(elementId, backend, width, height, background);\n }\n\n getContext() { return this.context; }\n setContext(context) { this.context = context; return this; }\n getStave() { return this.stave; }\n getVoices() { return this.voices; }\n\n // Returns pixels from current stave spacing.\n space(spacing) { return this.options.stave.space * spacing; }\n\n Stave(params) {\n params = setDefaults(params, {\n x: 0,\n y: 0,\n width: this.options.renderer.width - this.space(1),\n options: {\n spacing_between_lines_px: this.options.stave.space,\n },\n });\n\n const stave = new Stave(params.x, params.y, params.width, params.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n\n TabStave(params) {\n params = setDefaults(params, {\n x: 0,\n y: 0,\n width: this.options.renderer.width - this.space(1),\n options: {\n spacing_between_lines_px: this.options.stave.space * 1.3,\n },\n });\n\n const stave = new TabStave(params.x, params.y, params.width, params.options);\n this.staves.push(stave);\n stave.setContext(this.context);\n this.stave = stave;\n return stave;\n }\n\n StaveNote(noteStruct) {\n const note = new StaveNote(noteStruct);\n if (this.stave) note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n\n GlyphNote(glyph, noteStruct, options) {\n const note = new GlyphNote(glyph, noteStruct, options);\n if (this.stave) note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n\n RepeatNote(type, noteStruct, options) {\n const note = new RepeatNote(type, noteStruct, options);\n if (this.stave) note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n\n GhostNote(noteStruct) {\n const ghostNote = new GhostNote(noteStruct);\n if (this.stave) ghostNote.setStave(this.stave);\n ghostNote.setContext(this.context);\n this.renderQ.push(ghostNote);\n return ghostNote;\n }\n\n TextNote(textNoteStruct) {\n const textNote = new TextNote(textNoteStruct);\n if (this.stave) textNote.setStave(this.stave);\n textNote.setContext(this.context);\n this.renderQ.push(textNote);\n return textNote;\n }\n\n BarNote(params) {\n params = setDefaults(params, {\n type: 'single',\n options: {},\n });\n\n const barNote = new BarNote(params.type);\n if (this.stave) barNote.setStave(this.stave);\n barNote.setContext(this.context);\n this.renderQ.push(barNote);\n return barNote;\n }\n\n ClefNote(params) {\n params = setDefaults(params, {\n type: 'treble',\n options: {\n size: 'default',\n },\n });\n\n const clefNote = new ClefNote(params.type, params.options.size, params.options.annotation);\n if (this.stave) clefNote.setStave(this.stave);\n clefNote.setContext(this.context);\n this.renderQ.push(clefNote);\n return clefNote;\n }\n\n TimeSigNote(params) {\n params = setDefaults(params, {\n time: '4/4',\n options: {},\n });\n\n const timeSigNote = new TimeSigNote(params.time);\n if (this.stave) timeSigNote.setStave(this.stave);\n timeSigNote.setContext(this.context);\n this.renderQ.push(timeSigNote);\n return timeSigNote;\n }\n\n KeySigNote(params) {\n const keySigNote = new KeySigNote(params.key, params.cancelKey, params.alterKey);\n if (this.stave) keySigNote.setStave(this.stave);\n keySigNote.setContext(this.context);\n this.renderQ.push(keySigNote);\n return keySigNote;\n }\n\n TabNote(noteStruct) {\n const note = new TabNote(noteStruct);\n if (this.stave) note.setStave(this.stave);\n note.setContext(this.context);\n this.renderQ.push(note);\n return note;\n }\n\n GraceNote(noteStruct) {\n const note = new GraceNote(noteStruct);\n if (this.stave) note.setStave(this.stave);\n note.setContext(this.context);\n return note;\n }\n\n GraceNoteGroup(params) {\n const group = new GraceNoteGroup(params.notes, params.slur);\n group.setContext(this.context);\n return group;\n }\n\n Accidental(params) {\n params = setDefaults(params, {\n type: null,\n options: {},\n });\n\n const accid = new Accidental(params.type);\n accid.setContext(this.context);\n return accid;\n }\n\n Annotation(params) {\n params = setDefaults(params, {\n text: 'p',\n vJustify: 'below',\n hJustify: 'center',\n fontFamily: 'Times',\n fontSize: 14,\n fontWeight: 'bold italic',\n options: {},\n });\n\n const annotation = new Annotation(params.text);\n annotation.setJustification(params.hJustify);\n annotation.setVerticalJustification(params.vJustify);\n annotation.setFont(params.fontFamily, params.fontSize, params.fontWeight);\n annotation.setContext(this.context);\n return annotation;\n }\n\n Articulation(params) {\n params = setDefaults(params, {\n type: 'a.',\n position: 'above',\n options: {},\n });\n\n const articulation = new Articulation(params.type);\n articulation.setPosition(params.position);\n articulation.setContext(this.context);\n return articulation;\n }\n\n TextDynamics(params) {\n params = setDefaults(params, {\n text: 'p',\n duration: 'q',\n dots: 0,\n line: 0,\n options: {},\n });\n\n const text = new TextDynamics({\n text: params.text,\n line: params.line,\n duration: params.duration,\n dots: params.dots,\n });\n\n if (this.stave) text.setStave(this.stave);\n text.setContext(this.context);\n this.renderQ.push(text);\n return text;\n }\n\n Fingering(params) {\n params = setDefaults(params, {\n number: '0',\n position: 'left',\n options: {},\n });\n\n const fingering = new FretHandFinger(params.number);\n fingering.setPosition(params.position);\n fingering.setContext(this.context);\n return fingering;\n }\n\n StringNumber(params) {\n params = setDefaults(params, {\n number: '0',\n position: 'left',\n options: {},\n });\n\n const stringNumber = new StringNumber(params.number);\n stringNumber.setPosition(params.position);\n stringNumber.setContext(this.context);\n return stringNumber;\n }\n\n TickContext() {\n return new TickContext().setContext(this.context);\n }\n\n ModifierContext() {\n return new ModifierContext();\n }\n\n MultiMeasureRest(params) {\n const multimeasurerest = new MultiMeasureRest(params.number_of_measures, params);\n multimeasurerest.setContext(this.context);\n this.renderQ.push(multimeasurerest);\n return multimeasurerest;\n }\n\n Voice(params) {\n params = setDefaults(params, {\n time: '4/4',\n options: {},\n });\n const voice = new Voice(params.time, params.options);\n this.voices.push(voice);\n return voice;\n }\n\n StaveConnector(params) {\n params = setDefaults(params, {\n top_stave: null,\n bottom_stave: null,\n type: 'double',\n options: {},\n });\n const connector = new StaveConnector(params.top_stave, params.bottom_stave);\n connector.setType(params.type).setContext(this.context);\n this.renderQ.push(connector);\n return connector;\n }\n\n Formatter() {\n return new Formatter();\n }\n\n Tuplet(params) {\n params = setDefaults(params, {\n notes: [],\n options: {},\n });\n\n const tuplet = new Tuplet(params.notes, params.options).setContext(this.context);\n this.renderQ.push(tuplet);\n return tuplet;\n }\n\n Beam(params) {\n params = setDefaults(params, {\n notes: [],\n options: {\n autoStem: false,\n secondaryBeamBreaks: [],\n },\n });\n\n const beam = new Beam(params.notes, params.options.autoStem).setContext(this.context);\n beam.breakSecondaryAt(params.options.secondaryBeamBreaks);\n this.renderQ.push(beam);\n return beam;\n }\n\n Curve(params) {\n params = setDefaults(params, {\n from: null,\n to: null,\n options: {},\n });\n\n const curve = new Curve(params.from, params.to, params.options).setContext(this.context);\n this.renderQ.push(curve);\n return curve;\n }\n\n StaveTie(params) {\n params = setDefaults(params, {\n from: null,\n to: null,\n first_indices: [0],\n last_indices: [0],\n text: null,\n options: {\n direction: undefined,\n },\n });\n\n const tie = new StaveTie({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n }, params.text);\n\n if (params.options.direction) tie.setDirection(params.options.direction);\n tie.setContext(this.context);\n this.renderQ.push(tie);\n return tie;\n }\n\n StaveLine(params) {\n params = setDefaults(params, {\n from: null,\n to: null,\n first_indices: [0],\n last_indices: [0],\n options: {},\n });\n\n const line = new StaveLine({\n first_note: params.from,\n last_note: params.to,\n first_indices: params.first_indices,\n last_indices: params.last_indices,\n });\n\n if (params.options.text) line.setText(params.options.text);\n if (params.options.font) line.setFont(params.options.font);\n\n line.setContext(this.context);\n this.renderQ.push(line);\n return line;\n }\n\n VibratoBracket(params) {\n params = setDefaults(params, {\n from: null,\n to: null,\n options: {\n harsh: false,\n },\n });\n\n const vibratoBracket = new VibratoBracket({\n start: params.from,\n stop: params.to,\n });\n\n if (params.options.line) vibratoBracket.setLine(params.options.line);\n if (params.options.harsh) vibratoBracket.setHarsh(params.options.harsh);\n\n vibratoBracket.setContext(this.context);\n this.renderQ.push(vibratoBracket);\n\n return vibratoBracket;\n }\n\n TextBracket(params) {\n params = setDefaults(params, {\n from: null,\n to: null,\n text: '',\n options: {\n superscript: '',\n position: 1,\n },\n });\n\n const textBracket = new TextBracket({\n start: params.from,\n stop: params.to,\n text: params.text,\n superscript: params.options.superscript,\n position: params.options.position,\n });\n\n if (params.options.line) textBracket.setLine(params.options.line);\n if (params.options.font) textBracket.setFont(params.options.font);\n\n textBracket.setContext(this.context);\n this.renderQ.push(textBracket);\n return textBracket;\n }\n\n System(params = {}) {\n params.factory = this;\n const system = new System(params).setContext(this.context);\n this.systems.push(system);\n return system;\n }\n\n EasyScore(params = {}) {\n params.factory = this;\n return new EasyScore(params);\n }\n\n PedalMarking(params = {}) {\n params = setDefaults(params, {\n notes: [],\n options: {\n style: 'mixed',\n },\n });\n\n const pedal = new PedalMarking(params.notes);\n pedal.setStyle(PedalMarking.StylesString[params.options.style]);\n pedal.setContext(this.context);\n this.renderQ.push(pedal);\n return pedal;\n }\n\n NoteSubGroup(params = {}) {\n params = setDefaults(params, {\n notes: [],\n options: {},\n });\n\n const group = new NoteSubGroup(params.notes);\n group.setContext(this.context);\n return group;\n }\n\n draw() {\n this.systems.forEach(i => i.setContext(this.context).format());\n this.staves.forEach(i => i.setContext(this.context).draw());\n this.voices.forEach(i => i.setContext(this.context).draw());\n this.renderQ.forEach(i => {\n if (!i.isRendered()) i.setContext(this.context).draw();\n });\n this.systems.forEach(i => i.setContext(this.context).draw());\n this.reset();\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n//\n// This class implements a musical system, which is a collection of staves,\n// each which can have one or more voices. All voices across all staves in\n// the system are formatted together.\n\nimport { Element } from './element';\nimport { Factory } from './factory';\nimport { Formatter } from './formatter';\nimport { Note } from './note';\n\nexport class System extends Element {\n constructor(params = {}) {\n super();\n this.setAttribute('type', 'System');\n this.setOptions(params);\n this.parts = [];\n }\n\n setOptions(options = {}) {\n this.options = {\n x: 10,\n y: 10,\n width: 500,\n connector: null,\n spaceBetweenStaves: 12, // stave spaces\n factory: null,\n noJustification: false,\n debugFormatter: false,\n formatIterations: 0, // number of formatter tuning steps\n noPadding: false,\n ...options,\n details: {\n alpha: 0.5, // formatter tuner learning/shifting rate\n ...options.details,\n },\n };\n\n this.factory = this.options.factory || new Factory({ renderer: { el: null } });\n }\n\n setContext(context) {\n super.setContext(context);\n this.factory.setContext(context);\n return this;\n }\n\n addConnector(type = 'double') {\n this.connector = this.factory.StaveConnector({\n top_stave: this.parts[0].stave,\n bottom_stave: this.parts[this.parts.length - 1].stave,\n type,\n });\n return this.connector;\n }\n\n addStave(params) {\n params = {\n stave: null,\n voices: [],\n spaceAbove: 0, // stave spaces\n spaceBelow: 0, // stave spaces\n debugNoteMetrics: false,\n ...params,\n options: {\n left_bar: false,\n ...params.options,\n },\n };\n\n if (!params.stave) {\n params.stave = this.factory.Stave({\n x: this.options.x,\n y: this.options.y,\n width: this.options.width,\n options: params.options,\n });\n }\n\n params.voices.forEach(voice =>\n voice\n .setContext(this.context)\n .setStave(params.stave)\n .getTickables()\n .forEach(tickable => tickable.setStave(params.stave))\n );\n\n this.parts.push(params);\n return params.stave;\n }\n\n format() {\n const formatter = new Formatter({ ...this.options.details });\n this.formatter = formatter;\n\n let y = this.options.y;\n let startX = 0;\n let allVoices = [];\n const debugNoteMetricsYs = [];\n\n // Join the voices for each stave.\n this.parts.forEach(part => {\n y = y + part.stave.space(part.spaceAbove);\n part.stave.setY(y);\n formatter.joinVoices(part.voices);\n y = y + part.stave.space(part.spaceBelow);\n y = y + part.stave.space(this.options.spaceBetweenStaves);\n if (part.debugNoteMetrics) {\n debugNoteMetricsYs.push({ y, voice: part.voices[0] });\n y += 15;\n }\n allVoices = allVoices.concat(part.voices);\n\n startX = Math.max(startX, part.stave.getNoteStartX());\n });\n\n // Update the start position of all staves.\n this.parts.forEach(part => part.stave.setNoteStartX(startX));\n const justifyWidth = this.options.noPadding ?\n this.options.width - this.options.x :\n this.options.width - (startX - this.options.x) - this.musicFont.lookupMetric('stave.padding');\n\n formatter.format(allVoices, this.options.noJustification ? 0 : justifyWidth);\n\n for (let i = 0; i < this.options.formatIterations; i++) {\n formatter.tune({ alpha: this.options.details.alpha });\n }\n\n this.startX = startX;\n this.debugNoteMetricsYs = debugNoteMetricsYs;\n this.lastY = y;\n }\n\n draw() {\n // Render debugging information, if requested.\n const ctx = this.checkContext();\n this.setRendered();\n\n if (this.options.debugFormatter) {\n Formatter.plotDebugging(ctx, this.formatter, this.startX, this.options.y, this.lastY);\n }\n\n this.debugNoteMetricsYs.forEach(d => {\n d.voice.getTickables().forEach(note => Note.plotMetrics(ctx, note, d.y));\n });\n }\n}\n","// [VexFlow](http://vexflow.com) - Copyright (c) Mohit Muthanna 2010.\n\nimport { Vex } from './vex';\nimport { Flow } from './tables';\nimport { Element } from './element';\nimport { Fraction } from './fraction';\nimport { Renderer } from './renderer';\nimport { Formatter } from './formatter';\nimport { Music } from './music';\nimport { Glyph } from './glyph';\nimport { Stave } from './stave';\nimport { StaveNote } from './stavenote';\nimport { StaveModifier } from './stavemodifier';\nimport { StaveTempo } from './stavetempo';\nimport { Voice } from './voice';\nimport { Accidental } from './accidental';\nimport { Beam } from './beam';\nimport { StaveTie } from './stavetie';\nimport { TabStave } from './tabstave';\nimport { TabNote } from './tabnote';\nimport { Bend } from './bend';\nimport { Vibrato } from './vibrato';\nimport { VibratoBracket } from './vibratobracket';\nimport { Note } from './note';\nimport { ModifierContext } from './modifiercontext';\nimport { MultiMeasureRest } from './multimeasurerest';\nimport { TickContext } from './tickcontext';\nimport { Articulation } from './articulation';\nimport { Annotation } from './annotation';\nimport { Barline } from './stavebarline';\nimport { NoteHead } from './notehead';\nimport { StaveConnector } from './staveconnector';\nimport { ClefNote } from './clefnote';\nimport { KeySignature } from './keysignature';\nimport { KeySigNote } from './keysignote';\nimport { TimeSignature } from './timesignature';\nimport { TimeSigNote } from './timesignote';\nimport { Stem } from './stem';\nimport { TabTie } from './tabtie';\nimport { Clef } from './clef';\nimport { Dot } from './dot';\nimport { Modifier } from './modifier';\nimport { TabSlide } from './tabslide';\nimport { Tuplet } from './tuplet';\nimport { GraceNote } from './gracenote';\nimport { GraceTabNote } from './gracetabnote';\nimport { Tuning } from './tuning';\nimport { KeyManager } from './keymanager';\nimport { StaveHairpin } from './stavehairpin';\nimport { BoundingBox } from './boundingbox';\nimport { Stroke } from './strokes';\nimport { TextNote } from './textnote';\nimport { Curve } from './curve';\nimport { TextDynamics } from './textdynamics';\nimport { StaveLine } from './staveline';\nimport { Ornament } from './ornament';\nimport { PedalMarking } from './pedalmarking';\nimport { TextBracket } from './textbracket';\nimport { FretHandFinger } from './frethandfinger';\nimport { Repetition } from './staverepetition';\nimport { BarNote } from './barnote';\nimport { GhostNote } from './ghostnote';\nimport { NoteSubGroup } from './notesubgroup';\nimport { GraceNoteGroup } from './gracenotegroup';\nimport { Tremolo } from './tremolo';\nimport { StringNumber } from './stringnumber';\nimport { Crescendo } from './crescendo';\nimport { Volta } from './stavevolta';\nimport { System } from './system';\nimport { Factory } from './factory';\nimport { Parser } from './parser';\nimport { EasyScore } from './easyscore';\nimport { Registry } from './registry';\nimport { StaveText } from './stavetext';\nimport { GlyphNote } from './glyphnote';\nimport { RepeatNote } from './repeatnote';\n\nimport { Font, Fonts, DefaultFontStack } from './smufl';\n\nVex.Flow = Flow;\nVex.Flow.Element = Element;\nVex.Flow.Fraction = Fraction;\nVex.Flow.Renderer = Renderer;\nVex.Flow.Formatter = Formatter;\nVex.Flow.Music = Music;\nVex.Flow.Glyph = Glyph;\nVex.Flow.Stave = Stave;\nVex.Flow.StaveNote = StaveNote;\nVex.Flow.StaveModifier = StaveModifier;\nVex.Flow.StaveTempo = StaveTempo;\nVex.Flow.Voice = Voice;\nVex.Flow.Accidental = Accidental;\nVex.Flow.Beam = Beam;\nVex.Flow.StaveTie = StaveTie;\nVex.Flow.TabStave = TabStave;\nVex.Flow.TabNote = TabNote;\nVex.Flow.Bend = Bend;\nVex.Flow.Vibrato = Vibrato;\nVex.Flow.VibratoBracket = VibratoBracket;\nVex.Flow.Note = Note;\nVex.Flow.ModifierContext = ModifierContext;\nVex.Flow.MultiMeasureRest = MultiMeasureRest;\nVex.Flow.TickContext = TickContext;\nVex.Flow.Articulation = Articulation;\nVex.Flow.Annotation = Annotation;\nVex.Flow.Barline = Barline;\nVex.Flow.NoteHead = NoteHead;\nVex.Flow.StaveConnector = StaveConnector;\nVex.Flow.ClefNote = ClefNote;\nVex.Flow.KeySignature = KeySignature;\nVex.Flow.KeySigNote = KeySigNote;\nVex.Flow.TimeSignature = TimeSignature;\nVex.Flow.TimeSigNote = TimeSigNote;\nVex.Flow.Stem = Stem;\nVex.Flow.TabTie = TabTie;\nVex.Flow.Clef = Clef;\nVex.Flow.Dot = Dot;\nVex.Flow.Modifier = Modifier;\nVex.Flow.TabSlide = TabSlide;\nVex.Flow.Tuplet = Tuplet;\nVex.Flow.GraceNote = GraceNote;\nVex.Flow.GraceTabNote = GraceTabNote;\nVex.Flow.Tuning = Tuning;\nVex.Flow.KeyManager = KeyManager;\nVex.Flow.StaveHairpin = StaveHairpin;\nVex.Flow.BoundingBox = BoundingBox;\nVex.Flow.Stroke = Stroke;\nVex.Flow.TextNote = TextNote;\nVex.Flow.Curve = Curve;\nVex.Flow.TextDynamics = TextDynamics;\nVex.Flow.StaveLine = StaveLine;\nVex.Flow.Ornament = Ornament;\nVex.Flow.PedalMarking = PedalMarking;\nVex.Flow.TextBracket = TextBracket;\nVex.Flow.FretHandFinger = FretHandFinger;\nVex.Flow.Repetition = Repetition;\nVex.Flow.BarNote = BarNote;\nVex.Flow.GhostNote = GhostNote;\nVex.Flow.NoteSubGroup = NoteSubGroup;\nVex.Flow.GraceNoteGroup = GraceNoteGroup;\nVex.Flow.Tremolo = Tremolo;\nVex.Flow.StringNumber = StringNumber;\nVex.Flow.Crescendo = Crescendo;\nVex.Flow.Volta = Volta;\nVex.Flow.System = System;\nVex.Flow.Factory = Factory;\nVex.Flow.Parser = Parser;\nVex.Flow.EasyScore = EasyScore;\nVex.Flow.Registry = Registry;\nVex.Flow.StaveText = StaveText;\nVex.Flow.GlyphNote = GlyphNote;\nVex.Flow.RepeatNote = RepeatNote;\n\nVex.Flow.Font = Font;\nVex.Flow.Fonts = Fonts;\nVex.Flow.DefaultFontStack = DefaultFontStack;\n\nexport default Vex;\n"],"sourceRoot":""}