:1000000001FF18FFF5FFCFFF00FF00FFFFFF00FF1C
:1000100000FF00FFFFFF00FF00FF00FFFFFF00FFEA
:1000200026FF18FFFFFF0FFF00FF00FFFFFF00FF8D
:1000300000FF00FFFFFF00FF00FF00FFFFFF00FFCA
:1000400000FF0AFFFFFF1FFF00FF00FFFFFF00FF91
:1000500000FF00FFFFFF00FF00FF00FFFFFF00FFAA
:1000600000FF0AFFFFFF1FFF00FF00FFFFFF00FF71
:1000700000FF00FFFFFF00FF00FF00FFFFFF00FF8A
:1000800000FF0AFFFFFF1FFF00FF00FFFFFF00FF51
:1000900000FF00FFFFFF00FF00FF00FFFFFF00FF6A
:1000A00038FF18FFFFFFDFFF00FF00FFFFFF00FF2B
:1000B00000FF00FFFFFF00FF00FF00FFFFFF00FF4A
:1000C00000FF0AFFFFFF1FFF00FF00FFFFFF00FF11
:1000D00000FF00FFFFFF00FF00FF00FFFFFF00FF2A
:1000E00003FF3CFFFFFFFCFF67FF40FFFFFFC0FF78
:1000F000FFFF93FFFFFFE0FF00FF0CFFFFFF0CFF80
:100100000CFF0CFFFFFF00FF30FF0CFFFFFF00FFA5
:100110000FFF40FFFFFFF4FF47FF80FFFFFF0AFFD5
:1001200082FF23FFFFFF0FFF8DFF93FFFFFF7AFF8B
:100130008DFF83FFFFFF70FF47FF90FFFFFF00FF72
:1001400000FF48FFFFFF04FFA0FF23FFFFFF0FFF9B
:1001500046FF90FFFFFF6AFF00FF0CFFFFFF20FF3D
:1001600000FF04FFFFFF1CFF00FF04FFFFFF1CFF59
:1001700000FF04FFFFFF1CFF00FF04FFFFFF1CFF49
:1001800000FF04FFFFFF10FF00FF04FFFFFF10FF51
:1001900000FF04FFFFFF10FF00FF04FFFFFF10FF41
:1001A00000FF04FFFFFF10FF00FF04FFFFFF10FF31
:1001B00000FF04FFFFFF10FF00FF04FFFFFF10FF21
:1001C00000FF04FFFFFF10FF00FF04FFFFFF10FF11
:1001D00000FF04FFFFFF10FF00FF04FFFFFF10FF01
:1001E00072FF1CFFFFFF5FFF02FF40FFFFFF40FFAA
:1001F00011FF90FFFFFF20FF00FF48FFFFFF00FF00
:100200008BFF93FFFFFF20FF00FF40FFFFFF00FF7A
:1002100086FF93FFFFFF70FF8BFF93FFFFFF30FF11
:100220008DFF93FFFFFF40FF02FF91FFFFFF80FF65
:1002300002FF91FFFFFF90FF8DFF93FFFFFFC0FFC5
:1002400046FF90FFFFFF20FF8DFF93FFFFFFD0FFD2
:1002500000FF48FFFFFF00FF8BFF93FFFFFF40FF02
:10026000FFFF47FFFFFFF0FF8DFF93FFFFFFE0FF62
:1002700000FF34FFFFFF17FF00FF38FFFFFF17FFEE
:1002800080FF37FFFFFF02FF84FF3BFFFFFF02FFFE
:1002900002FF34FFFFFF4AFF02FF38FFFFFF4AFF64
:1002A00001FF34FFFFFF2BFF01FF38FFFFFF2BFF94
:1002B00080FF43FFFFFF00FF82FF93FFFFFF50FF20
:1002C00081FF43FFFFFF20FF82FF93FFFFFF60FFDF
:1002D00084FF43FFFFFF00FF82FF93FFFFFF70FFDC
:1002E00085FF43FFFFFF20FF83FF93FFFFFFC0FF5A
:1002F00082FF37FFFFFF81FF00FF34FFFFFF89FF11
:1003000088FF43FFFFFF00FF00FF68FFFFFF07FFBD
:1003100082FF83FFFFFF60FF00FF68FFFFFF07FF13
:100320008CFF43FFFFFF00FF00FF68FFFFFF07FF99
:1003300083FF83FFFFFFC0FF00FF68FFFFFF07FF92
:100340008AFF43FFFFFF00FF00FF68FFFFFF07FF7B
:1003500082FF83FFFFFF50FF00FF68FFFFFF07FFE3
:100360008EFF43FFFFFF00FF00FF68FFFFFF07FF57
:1003700082FF83FFFFFF70FF00FF68FFFFFF07FFA3
:1003800083FF37FFFFFF01FF00FF34FFFFFF89FFFF
:1003900000FF34FFFFFF26FF30FF0CFFFFFF00FFD1
:1003A00000FF40FFFFFF26FF20FF40FFFFFF04FF8D
:1003B00080FF41FFFFFF02FFE0FF20FFFFFF0FFF75
:1003C00000FF68FFFFFFB6FF63FF22FFFFFF0FFF85
:1003D00062FF6AFFFFFFA6FF62FF6AFFFFFFA6FF43
:1003E00000FF68FFFFFFA6FF00FF09FFFFFF07FFF9
:1003F00040FF41FFFFFF02FFE0FF20FFFFFF0FFF75
:1004000000FF68FFFFFFB6FF63FF22FFFFFF0FFF44
:1004100062FF6AFFFFFFA6FF62FF6AFFFFFFA6FF02
:1004200000FF68FFFFFFA6FF05FF41FFFFFF02FF80
:10043000E0FF20FFFFFF0FFF8BFF93FFFFFFBBFFDE
:1004400002FF41FFFFFF82FFE0FF20FFFFFF0FFFE2
:100450008BFF93FFFFFFCBFF05FF41FFFFFFE2FF95
:10046000E0FF20FFFFFF0FFF8BFF93FFFFFFDBFF8E
:1004700020FF0CFFFFFF00FF30FF0CFFFFFF00FF1E
:1004800000FF40FFFFFF26FF00FF41FFFFFF02FFCD
:10049000E0FF20FFFFFF0FFF83FF93FFFFFF82FFBF
:1004A00083FF93FFFFFF9BFF03FF41FFFFFF02FF5F
:1004B000E0FF20FFFFFF0FFF83FF93FFFFFFA2FF7F
:1004C00083FF93FFFFFFBBFF20FF0CFFFFFF00FF39
:1004D00000FF40FFFFFF00FF44FF90FFFFFF60FFB2
:1004E00000FF00FFFFFF00FF00FF00FFFFFF00FF16
:1004F00000FF00FFFFFF00FF00FF00FFFFFF00FF06
:1005000000FF00FFFFFF00FF00FF00FFFFFF00FFF5
:1005100000FF00FFFFFF00FF00FF00FFFFFF00FFE5
:1005200021FF40FFFFFF60FF40FF90FFFFFF20FF24
:1005300002FF35FFFFFF00FF00FF34FFFFFF08FF52
:1005400000FF3CFFFFFF85FF0AFF14FFFFFFAEFF28
:1005500000FFA0FFFFFF03FF00FF35FFFFFF00FFCD
:1005600000FF34FFFFFF08FF02FF3CFFFFFF05FF16
:100570000AFF14FFFFFFFEFF00FFA0FFFFFF03FFC6
:1005800003FF35FFFFFF00FF00FF34FFFFFF08FF01
:1005900002FF3CFFFFFF05FF0BFF14FFFFFF4EFFB5
:1005A00000FFA0FFFFFF03FF00FF35FFFFFF01FF7C
:1005B00078FF1CFFFFFF5FFF03FF35FFFFFF01FF19
:1005C00078FF1CFFFFFF5FFF5BFF40FFFFFFF0FFB7
:1005D000FFFF93FFFFFF30FF80FF42FFFFFF70FF31
:1005E000FFFF93FFFFFF60FFDFFF40FFFFFFF0FF14
:1005F000FEFF93FFFFFFF0FF80FF42FFFFFF70FF52
:10060000FFFF93FFFFFF20FFC1FF41FFFFFF80FFC0
:10061000FFFF93FFFFFFF0FF03FF3CFFFFFFFCFF27
:1006200000FF3CFFFFFF04FF02FF3CFFFFFF23FF33
:1006300000FF48FFFFFF00FF8BFF93FFFFFF20FF3E
:1006400059FF18FFFFFFDFFF00FF48FFFFFF00FF1C
:100650008BFF93FFFFFF20FF18FF23FFFFFF0FFF1C
:100660000CFF14FFFFFFE4FF8BFF83FFFFFF24FF5E
:1006700000FF22FFFFFF0FFF0DFF18FFFFFF0FFF1F
:100680008BFF83FFFFFF20FF00FF40FFFFFF14FFF2
:10069000E0FF22FFFFFF0FFF10FF18FFFFFFD0FF5B
:1006A0008BFF83FFFFFF20FF00FF40FFFFFF24FFC2
:1006B000E0FF22FFFFFF0FFF10FF18FFFFFF30FFDB
:1006C0008BFF83FFFFFF20FF00FF40FFFFFF44FF82
:1006D000E0FF22FFFFFF0FFF22FF18FFFFFF90FF49
:1006E0008BFF83FFFFFF20FF00FF40FFFFFF84FF22
:1006F000E0FF22FFFFFF0FFF22FF18FFFFFF90FF29
:100700000CFF18FFFFFF6FFF00FF40FFFFFF00FF20
:1007100086FF93FFFFFF70FF76FF1CFFFFFF9FFF29
:1007200086FF83FFFFFF50FF86FF83FFFFFF64FF0D
:1007300060FF22FFFFFF0FFF74FF18FFFFFF81FF25
:1007400000FF35FFFFFF00FF60FF1CFFFFFF7FFF83
:1007500061FF1CFFFFFFAFFF77FF1CFFFFFFAFFF35
:1007600063FF1CFFFFFF4FFF05FF35FFFFFF00FF8B
:1007700092FF3BFFFFFF00FF00FF34FFFFFF08FF7A
:1007800000FF38FFFFFF08FF00FF3CFFFFFF65FF92
:100790000FFF14FFFFFF6EFF00FF60FFFFFF03FF6F
:1007A00000FF60FFFFFF13FF00FF78FFFFFF13FF55
:1007B00000FF78FFFFFF03FF05FF35FFFFFFE0FFAE
:1007C0007FFF38FFFFFF00FF00FF34FFFFFF08FF40
:1007D00000FF38FFFFFF08FF00FF3CFFFFFF65FF42
:1007E00010FF14FFFFFF0EFF00FF60FFFFFF03FF7E
:1007F00000FF60FFFFFF13FF00FF58FFFFFF13FF25
:1008000000FF58FFFFFF03FF79FF1CFFFFFFFFFF03
:1008100000FF0AFFFFFF0FFF0EFF1CFFFFFF1FFF80
:100820008DFF83FFFFFFE0FF78FF22FFFFFF0FFF39
:1008300015FF1CFFFFFF85FF75FF1CFFFFFF8FFFEC
:1008400000FF40FFFFFF40FF8BFF93FFFFFF80FF94
:1008500002FF40FFFFFF60FF11FF90FFFFFF20FF3F
:1008600016FF18FFFFFF1FFF0EFF1CFFFFFF1FFFFC
:1008700075FF1CFFFFFF8FFF80FF35FFFFFF00FFAD
:1008800000FF34FFFFFF08FF00FF40FFFFFF00FFF6
:1008900040FF3CFFFFFF05FF11FF14FFFFFF4EFF6E
:1008A00000FF68FFFFFF03FF87FF83FFFFFFF0FFED
:1008B00086FF93FFFFFF80FF90FF37FFFFFF00FFE2
:1008C00002FF34FFFFFF08FF00FF60FFFFFF03FF91
:1008D00089FF93FFFFFF20FF00FF60FFFFFF03FF83
:1008E00089FF93FFFFFF30FF00FF60FFFFFF03FF63
:1008F00089FF93FFFFFF40FF00FF60FFFFFF03FF43
:1009000089FF93FFFFFF50FF86FF97FFFFFF90FFD8
:1009100003FF35FFFFFF00FF60FF1CFFFFFF7FFFAE
:1009200063FF1CFFFFFF7FFF00FF40FFFFFF00FF93
:100930008DFF93FFFFFF60FF82FF93FFFFFF40FFEC
:1009400086FF93FFFFFFA0FF83FF37FFFFFF80FFBE
:1009500075FF1CFFFFFF1FFF83FF43FFFFFF00FF2B
:1009600087FF93FFFFFFE0FF6AFF1CFFFFFF0FFF02
:1009700040FF41FFFFFF00FF8BFF93FFFFFF90FF52
:1009800080FF41FFFFFF00FF8BFF93FFFFFFA0FFF2
:100990008BFF87FFFFFF90FF7EFF38FFFFFF00FF09
:1009A00040FF34FFFFFF08FF00FF38FFFFFF08FF95
:1009B00000FF3CFFFFFF55FF13FF14FFFFFFBEFFCB
:1009C00000FF60FFFFFF03FF00FF60FFFFFF13FF5B
:1009D00000FF58FFFFFF13FF00FF58FFFFFF03FF5B
:1009E00000FF60FFFFFF03FF00FF60FFFFFF13FF3B
:1009F00000FF58FFFFFF13FF00FF58FFFFFF03FF3B
:100A000000FF60FFFFFF03FF00FF60FFFFFF13FF1A
:100A100000FF58FFFFFF13FF00FF58FFFFFF03FF1A
:100A200000FF60FFFFFF03FF00FF60FFFFFF03FF0A
:100A30008BFF97FFFFFF90FF05FF41FFFFFF00FFC8
:100A400092FF43FFFFFF01FF86FF93FFFFFFF0FFD1
:100A500086FF93FFFFFFE1FF8DFF83FFFFFFE0FFB6
:100A600078FF22FFFFFF0FFF15FF1CFFFFFF85FF31
:100A700075FF1CFFFFFF8FFF8DFF83FFFFFF40FF10
:100A800078FF22FFFFFF0FFF53FF18FFFFFFB4FFA8
:100A900072FF1CFFFFFF0FFF00FF40FFFFFF00FF83
:100AA0008BFF93FFFFFF30FF02FF40FFFFFF60FF60
:100AB00011FF90FFFFFF20FF16FF18FFFFFF4FFF02
:100AC00038FF42FFFFFF50FF48FF90FFFFFFA0FFEE
:100AD00000FF00FFFFFF00FF00FF00FFFFFF00FF20
:100AE00000FF00FFFFFF00FF00FF00FFFFFF00FF10
:100AF00030FF40FFFFFF00FF47FF90FFFFFF50FF69
:100B000000FF0AFFFFFF0FFF1EFF1CFFFFFF0FFF8D
:100B100020FF1CFFFFFFCFFF16FF18FFFFFF1FFF87
:100B200000FF40FFFFFF00FF46FF90FFFFFF70FF49
:100B300018FF1CFFFFFFEFFF6AFF1CFFFFFFBFFF57
:100B40005CFF1CFFFFFF7FFF18FF1CFFFFFFEFFF95
:100B500067FF1CFFFFFF3FFF5CFF1CFFFFFF7FFFE6
:100B600008FF40FFFFFF00FF46FF90FFFFFF70FF01
:100B700018FF1CFFFFFFEFFF69FF1CFFFFFF0FFFC8
:100B80005DFF1CFFFFFF2FFF18FF1CFFFFFFEFFFA4
:100B900079FF1CFFFFFF1FFF5CFF1CFFFFFF7FFFB4
:100BA00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFF35
:100BB00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFF25
:100BC00018FF1CFFFFFFEFFF5DFF1CFFFFFF2FFF64
:100BD00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFF05
:100BE00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFF5
:100BF00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFE5
:100C000018FF1CFFFFFFEFFF5DFF1CFFFFFF2FFF23
:100C100018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFC4
:100C200018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFB4
:100C300018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFA4
:100C400018FF1CFFFFFFEFFF5DFF1CFFFFFF2FFFE3
:100C500018FF1CFFFFFFEFFF66FF1CFFFFFF1FFFDA
:100C60005CFF1CFFFFFF7FFF16FF18FFFFFF4FFF1A
:100C70008BFF87FFFFFF61FF00FF34FFFFFF89FF4E
:100C800000FF34FFFFFF26FF00FF60FFFFFF06FFAE
:100C900083FF93FFFFFFD0FF00FF60FFFFFF06FF12
:100CA00083FF93FFFFFFE0FF38FF22FFFFFF0FFFEF
:100CB00019FF14FFFFFF85FF8BFF83FFFFFF50FF2E
:100CC00078FF22FFFFFF0FFF00FF60FFFFFF07FF1E
:100CD00004FF0DFFFFFF30FF00FF60FFFFFF07FF76
:100CE00083FF93FFFFFFF0FF00FF60FFFFFF07FFA1
:100CF00008FF0DFFFFFF30FF00FF60FFFFFF07FF52
:100D000086FF93FFFFFF40FF00FF40FFFFFF01FF53
:100D10008BFF93FFFFFF51FF00FF34FFFFFF46FFF4
:100D200000FF09FFFFFF06FF8BFF97FFFFFF61FF3B
:100D300083FF8BFFFFFFD0FF83FF8BFFFFFFE1FFF0
:100D400087FF37FFFFFF01FF6EFF1CFFFFFFBFFFA5
:100D500087FF37FFFFFF00FF92FF37FFFFFF01FF15
:100D60007FFF38FFFFFF00FF7EFF38FFFFFF01FF1F
:100D700023FF1CFFFFFFFFFF7EFF38FFFFFF00FF89
:100D800083FF87FFFFFFF1FF86FF8BFFFFFF41FF20
:100D90006CFF1CFFFFFF2FFF87FF37FFFFFF00FFE8
:100DA0008BFF8BFFFFFFA0FF00FF34FFFFFF08FF5B
:100DB00040FF38FFFFFF08FF00FF3CFFFFFF55FF2C
:100DC0001BFF14FFFFFFCEFF00FF60FFFFFF03FFCD
:100DD00000FF60FFFFFF13FF00FF78FFFFFF13FF1F
:100DE00000FF78FFFFFF03FF00FF60FFFFFF03FF2F
:100DF00000FF60FFFFFF13FF00FF78FFFFFF13FFFF
:100E000000FF78FFFFFF03FF00FF60FFFFFF03FF0E
:100E100000FF60FFFFFF13FF00FF78FFFFFF13FFDE
:100E200000FF78FFFFFF03FF8BFF83FFFFFFE1FF62
:100E30008BFF83FFFFFFF0FF00FF78FFFFFF13FF33
:100E400000FF78FFFFFF03FF8BFF9BFFFFFFA0FF6B
:100E50008BFF87FFFFFF90FF7EFF38FFFFFF00FF44
:100E600040FF34FFFFFF08FF00FF38FFFFFF08FFD0
:100E700000FF3CFFFFFF55FF1DFF14FFFFFF3EFF7C
:100E800000FF60FFFFFF03FF00FF60FFFFFF13FF96
:100E900000FF58FFFFFF13FF00FF58FFFFFF03FF96
:100EA00000FF60FFFFFF03FF00FF60FFFFFF13FF76
:100EB00000FF58FFFFFF13FF00FF58FFFFFF03FF76
:100EC00000FF60FFFFFF03FF00FF60FFFFFF13FF56
:100ED00000FF58FFFFFF13FF00FF58FFFFFF03FF56
:100EE00000FF60FFFFFF03FF00FF60FFFFFF03FF46
:100EF0008BFF97FFFFFF90FF00FF0AFFFFFF0FFF31
:100F00008BFF87FFFFFF61FF00FF34FFFFFF89FFBB
:100F100000FF34FFFFFF26FF00FF60FFFFFF06FF1B
:100F200083FF93FFFFFFD0FF00FF60FFFFFF06FF7F
:100F300083FF93FFFFFFE0FF8BFF83FFFFFF51FF66
:100F400079FF22FFFFFF0FFF74FF18FFFFFFB4FFC1
:100F500038FF22FFFFFF0FFF1EFF14FFFFFFD5FF2B
:100F60008BFF83FFFFFF50FF78FF22FFFFFF0FFF84
:100F700000FF60FFFFFF07FF04FF0DFFFFFF30FFD3
:100F800000FF60FFFFFF07FF83FF93FFFFFFF0FFFE
:100F900000FF60FFFFFF07FF08FF0DFFFFFF30FFAF
:100FA00000FF60FFFFFF07FF86FF93FFFFFF40FF8B
:100FB00000FF40FFFFFF01FF8BFF93FFFFFF51FF8B
:100FC00000FF34FFFFFF46FF00FF09FFFFFF06FFA2
:100FD0008BFF97FFFFFF61FF83FF8BFFFFFFD0FFBA
:100FE00083FF8BFFFFFFE1FF87FF37FFFFFF01FF5D
:100FF0006EFF1CFFFFFFBFFF87FF37FFFFFF00FFF4
:1010000092FF37FFFFFF01FF7FFF38FFFFFF00FF69
:1010100023FF1CFFFFFFFFFF7EFF38FFFFFF00FFE6
:1010200083FF87FFFFFFF1FF86FF8BFFFFFF41FF7D
:101030006CFF1CFFFFFF2FFF00FF0AFFFFFF0FFFEA
:101040008DFF8FFFFFFFC5FF20FF14FFFFFFAEFFE7
:1010500000FF00FFFFFF00FF00FF0AFFFFFF0FFF81
:101060008BFF83FFFFFF84FF00FF23FFFFFF0FFFC6
:101070008BFF93FFFFFF8AFF64FF1CFFFFFFE0FF72
:101080007EFF38FFFFFF00FF00FF38FFFFFF08FF74
:1010900000FF3CFFFFFFE5FF21FF14FFFFFF5EFFA6
:1010A00000FF40FFFFFF00FF00FF58FFFFFF03FFAF
:1010B00000FF0AFFFFFF0FFF08FF40FFFFFF10FFC9
:1010C00047FF90FFFFFF20FF00FF04FFFFFF1CFF13
:1010D00000FF04FFFFFF1CFF00FF04FFFFFF1CFFDA
:1010E00000FF04FFFFFF1CFF00FF04FFFFFF10FFD6
:1010F00000FF04FFFFFF10FF00FF04FFFFFF10FFD2
:1011000000FF04FFFFFF10FF00FF04FFFFFF10FFC1
:1011100000FF04FFFFFF10FF00FF04FFFFFF10FFB1
:1011200000FF04FFFFFF10FF00FF04FFFFFF10FFA1
:1011300000FF04FFFFFF10FF00FF04FFFFFF10FF91
:1011400000FF04FFFFFF10FF02FF40FFFFFF40FF13
:1011500011FF90FFFFFF20FF78FF42FFFFFF50FFCE
:1011600048FF90FFFFFFA0FF00FF00FFFFFF00FF11
:1011700000FF00FFFFFF00FF00FF00FFFFFF00FF79
:1011800000FF00FFFFFF00FF00FF00FFFFFF00FF69
:10119000B0FF40FFFFFF00FF47FF90FFFFFF50FF42
:1011A00000FF40FFFFFF00FF8DFF93FFFFFF40FFA9
:1011B0008DFF93FFFFFF50FF00FF40FFFFFF01FF88
:1011C0008BFF93FFFFFF51FF00FF40FFFFFF00FF7A
:1011D00046FF90FFFFFF70FF8DFF83FFFFFFD0FFF3
:1011E00078FF22FFFFFF0FFF0CFF18FFFFFF90FFAC
:1011F0000CFF18FFFFFF6FFF20FF0CFFFFFF00FF3A
:1012000000FF34FFFFFF09FF00FF34FFFFFF08FF6F
:1012100000FF38FFFFFF08FF00FF38FFFFFF09FF57
:1012200000FF38FFFFFF06FF00FF34FFFFFF26FF30
:1012300098FFCCFFFFFF37FF00FF3CFFFFFFA5FF3C
:1012400024FF14FFFFFFFEFF00FF60FFFFFF73FF9F
:1012500008FF0DFFFFFF14FF98FF20FFFFFF0FFFA8
:1012600000FF50FFFFFFC6FF69FFCCFFFFFF37FF06
:1012700000FF05FFFFFF00FF00FF58FFFFFFC6FF55
:1012800098FF20FFFFFF0FFF00FF60FFFFFF72FFCF
:1012900008FF0DFFFFFF14FF00FF50FFFFFFC6FF19
:1012A00069FFCCFFFFFF37FF00FF05FFFFFF00FFD7
:1012B00000FF58FFFFFFC6FF98FF20FFFFFF0FFF53
:1012C00000FF60FFFFFF73FF08FF0DFFFFFF14FF2C
:1012D00000FF50FFFFFFC6FF69FF20FFFFFF0FFF6A
:1012E00000FF05FFFFFF00FF00FF58FFFFFFC6FFE5
:1012F00030FF0CFFFFFF00FF00FF0AFFFFFF0FFFA3
:1013000000FF0CFFFFFF30FF47FF80FFFFFF58FF8C
:1013100010FF0FFFFFFF01FF66FF23FFFFFF0FFF1F
:1013200026FF18FFFFFF94FF00FF48FFFFFF00FFAD
:101330008BFF93FFFFFF40FF80FF40FFFFFF00FF99
:1013400049FF90FFFFFF40FF16FF0FFFFFFF02FF67
:1013500066FF23FFFFFF0FFF38FF18FFFFFFB4FFFB
:101360000FFF40FFFFFFF4FF47FF80FFFFFF0AFF73
:1013700082FF23FFFFFF0FFF8DFF93FFFFFF7AFF29
:101380007AFF26FFFFFF0FFF10FF27FFFFFF0FFF72
:1013900038FF18FFFFFFB4FF27FF18FFFFFFD2FF42
:1013A00000FF48FFFFFF00FF8BFF93FFFFFF30FFB1
:1013B0008DFF83FFFFFF70FF47FF90FFFFFF00FFE0
:1013C00000FF48FFFFFF04FFA0FF23FFFFFF0FFF09
:1013D00046FF90FFFFFF6AFF00FF0CFFFFFF20FFAB
:1013E00000FF0AFFFFFF1FFF10FF27FFFFFF0FFF98
:1013F00029FF18FFFFFF92FF46FF80FFFFFF00FF5E
:101400008BFF93FFFFFF20FF8DFF83FFFFFF70FF28
:1014100047FF90FFFFFF00FF00FF48FFFFFF04FFB3
:10142000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFB4
:1014300000FF0CFFFFFF20FF00FF04FFFFFF1CFF6A
:1014400000FF04FFFFFF1CFF00FF04FFFFFF1CFF66
:1014500000FF04FFFFFF1CFF00FF04FFFFFF10FF62
:1014600000FF04FFFFFF10FF00FF04FFFFFF10FF5E
:1014700000FF04FFFFFF10FF00FF04FFFFFF10FF4E
:1014800000FF04FFFFFF10FF00FF04FFFFFF10FF3E
:1014900000FF04FFFFFF10FF00FF04FFFFFF10FF2E
:1014A00000FF04FFFFFF10FF00FF04FFFFFF10FF1E
:1014B00000FF04FFFFFF10FF00FF04FFFFFF03FF1B
:1014C0000DFF18FFFFFF0FFF10FF27FFFFFF0FFFAC
:1014D00031FF18FFFFFF12FF30FF0CFFFFFF00FF7F
:1014E00008FF0CFFFFFF00FFFFFF4FFFFFFF89FF1B
:1014F00090FF37FFFFFF00FF02FF34FFFFFF08FFF1
:1015000000FF34FFFFFF34FF00FF34FFFFFF55FFF4
:1015100046FF80FFFFFF08FF00FF0EFFFFFF0FFFEA
:1015200000FF0DFFFFFF4EFFA7FF23FFFFFF0FFF91
:1015300000FF68FFFFFFA3FF00FF0DFFFFFF4AFF53
:1015400046FF80FFFFFF18FF00FF0EFFFFFF0FFFAA
:1015500000FF0DFFFFFF5EFFAFFF23FFFFFF0FFF49
:1015600000FF68FFFFFFA0FF00FF0DFFFFFF5AFF16
:1015700046FF80FFFFFF48FF10FF0FFFFFFFFEFF4A
:1015800087FF93FFFFFFFEFF00FF0DFFFFFF2EFF12
:1015900002FF40FFFFFF06FFE0FF20FFFFFF0FFFFE
:1015A00000FF40FFFFFF01FF63FF22FFFFFF0FFF70
:1015B00000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF88
:1015C00000FF0DFFFFFF5AFF00FF68FFFFFFA0FFB6
:1015D00000FF0DFFFFFF5AFF63FF22FFFFFF0FFF1A
:1015E00000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF58
:1015F00000FF0DFFFFFF5AFF00FF68FFFFFFA0FF86
:1016000063FF22FFFFFF0FFF00FF0DFFFFFF4AFFF9
:1016100049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF17
:1016200000FF68FFFFFFA0FF63FF22FFFFFF0FFF28
:1016300000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF07
:1016400000FF0DFFFFFF5AFF00FF68FFFFFFA0FF35
:1016500063FF22FFFFFF0FFF00FF0DFFFFFF4AFFA9
:1016600049FF6AFFFFFFA3FF00FF0DFFFFFF5AFFC7
:1016700000FF68FFFFFFA0FF63FF22FFFFFF0FFFD8
:1016800000FF0DFFFFFF4AFF49FF6AFFFFFFA3FFB7
:1016900000FF0DFFFFFF5AFF00FF68FFFFFFA0FFE5
:1016A00063FF22FFFFFF0FFF00FF0DFFFFFF4AFF59
:1016B00049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF77
:1016C00000FF68FFFFFFA1FF46FF80FFFFFF28FF2D
:1016D00000FF0EFFFFFF0FFF00FF0DFFFFFF4EFF9C
:1016E000A7FF23FFFFFF0FFF00FF68FFFFFFA3FF20
:1016F00000FF0DFFFFFF4AFF46FF80FFFFFF38FF9F
:1017000000FF0EFFFFFF0FFF00FF0DFFFFFF5EFF5B
:10171000AFFF23FFFFFF0FFF00FF68FFFFFFA0FFEA
:1017200000FF0DFFFFFF5AFF63FF22FFFFFF0FFFC8
:1017300000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF06
:1017400000FF0DFFFFFF5AFF00FF68FFFFFFA0FF34
:1017500063FF22FFFFFF0FFF00FF0DFFFFFF4AFFA8
:1017600049FF6AFFFFFFA3FF00FF0DFFFFFF5AFFC6
:1017700000FF68FFFFFFA0FF63FF22FFFFFF0FFFD7
:1017800000FF0DFFFFFF4AFF49FF6AFFFFFFA3FFB6
:1017900000FF0DFFFFFF5AFF00FF68FFFFFFA0FFE4
:1017A00063FF22FFFFFF0FFF00FF0DFFFFFF4AFF58
:1017B00049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF76
:1017C00000FF68FFFFFFA0FF63FF22FFFFFF0FFF87
:1017D00000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF66
:1017E00000FF0DFFFFFF5AFF00FF68FFFFFFA0FF94
:1017F00063FF22FFFFFF0FFF00FF0DFFFFFF4AFF08
:1018000049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF25
:1018100000FF68FFFFFFA0FF63FF22FFFFFF0FFF36
:1018200000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF15
:1018300000FF0DFFFFFF5AFF00FF68FFFFFFA3FF40
:10184000FFFF4FFFFFFFF0FF86FF93FFFFFF50FFFB
:101850008DFF83FFFFFF70FF47FF90FFFFFF00FF3B
:1018600000FF48FFFFFF04FFA0FF23FFFFFF0FFF64
:1018700046FF90FFFFFF6AFF00FF0CFFFFFF20FF06
:1018800000FF0AFFFFFF1FFF10FF27FFFFFF0FFFF3
:1018900032FF18FFFFFF42FF8BFF83FFFFFFE4FFD4
:1018A0008BFF83FFFFFFF5FF46FF90FFFFFF44FF25
:1018B00008FF22FFFFFF0FFFFFFF4FFFFFFF89FF22
:1018C00000FF0DFFFFFF8AFF00FF0EFFFFFF0FFF6E
:1018D00000FF0DFFFFFF4EFFA7FF23FFFFFF0FFFDE
:1018E00046FF90FFFFFF5AFF8DFF83FFFFFF70FF52
:1018F00047FF90FFFFFF00FF00FF48FFFFFF04FFCF
:10190000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFCF
:1019100000FF0CFFFFFF20FF00FF0AFFFFFF1FFF7C
:1019200010FF27FFFFFF0FFF35FF18FFFFFFD2FF5C
:1019300000FF4CFFFFFF00FF00FF93FFFFFF00FFD2
:101940000BFF40FFFFFF80FF11FF90FFFFFFF0FF45
:1019500000FF40FFFFFF10FF11FF90FFFFFFE0FFC0
:1019600046FF80FFFFFF0AFF7AFF26FFFFFF0FFF02
:1019700035FF1CFFFFFF24FF10FF27FFFFFF0FFFB6
:1019800033FF18FFFFFFC5FF00FF40FFFFFFC0FF51
:1019900011FF90FFFFFF60FF8DFF93FFFFFFD0FF60
:1019A00000FF48FFFFFF00FF8DFF83FFFFFF70FF79
:1019B00047FF90FFFFFF00FF00FF48FFFFFF04FF0E
:1019C000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF0F
:1019D00000FF0CFFFFFF20FF00FF0AFFFFFF1FFFBC
:1019E00010FF27FFFFFF0FFF34FF18FFFFFF85FFEA
:1019F00000FF40FFFFFF40FF11FF90FFFFFF60FF70
:101A00008DFF93FFFFFFD0FF8DFF83FFFFFF70FF70
:101A100047FF90FFFFFF00FF00FF48FFFFFF04FFAD
:101A2000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFAE
:101A300000FF0CFFFFFF20FF00FF0AFFFFFF1FFF5B
:101A400000FF40FFFFFF00FF11FF90FFFFFF60FF5F
:101A50008DFF93FFFFFFD0FF8DFF83FFFFFF70FF20
:101A600047FF90FFFFFF00FF00FF48FFFFFF04FF5D
:101A7000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF5E
:101A800000FF0CFFFFFF20FF00FF0AFFFFFF1FFF0B
:101A900000FF48FFFFFF00FF8DFF93FFFFFF80FF68
:101AA00000FF48FFFFFF00FF00FF93FFFFFF00FF65
:101AB0000DFF40FFFFFFF0FF11FF90FFFFFFF0FF62
:101AC00000FF40FFFFFF10FF11FF90FFFFFFE0FF4F
:101AD000FFFF40FFFFFFF0FF90FF27FFFFFF0FFF1B
:101AE00000FF0AFFFFFF0FFF10FF27FFFFFF0FFFA1
:101AF00037FF18FFFFFF42FF46FF80FFFFFF00FF99
:101B000089FF93FFFFFFA0FF46FF80FFFFFF10FF4D
:101B100089FF93FFFFFFB0FF46FF80FFFFFF20FF1D
:101B200089FF93FFFFFFC0FF46FF80FFFFFF30FFED
:101B300089FF93FFFFFFD0FF46FF80FFFFFF40FFBD
:101B400089FF93FFFFFFE0FF46FF80FFFFFF50FF8D
:101B500089FF93FFFFFFF0FF00FF40FFFFFF10FF33
:101B600086FF93FFFFFF60FF8DFF83FFFFFF70FF86
:101B700047FF90FFFFFF00FF00FF48FFFFFF04FF4C
:101B8000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF4D
:101B900000FF0CFFFFFF20FF00FF0AFFFFFF1FFFFA
:101BA00010FF27FFFFFF0FFF39FF18FFFFFF22FF86
:101BB00046FF80FFFFFF00FF8DFF93FFFFFF20FF29
:101BC00046FF80FFFFFF10FF8DFF93FFFFFF30FFF9
:101BD00046FF80FFFFFF20FF78FF22FFFFFF0FFF80
:101BE00038FF1CFFFFFF84FF00FF40FFFFFF00FFE7
:101BF00046FF90FFFFFF20FF00FF48FFFFFF00FFB1
:101C00008DFF93FFFFFF40FF8DFF83FFFFFF70FFFE
:101C100047FF90FFFFFF00FF00FF48FFFFFF04FFAB
:101C2000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFAC
:101C300000FF0CFFFFFF20FF00FF0AFFFFFF1FFF59
:101C400000FF48FFFFFF00FF8DFF93FFFFFF50FFE6
:101C500000FF0AFFFFFF0FFF00FF0CFFFFFF20FF49
:101C600000FF0AFFFFFF1FFF00FF0CFFFFFF30FF19
:101C700000FF48FFFFFF00FF8BFF93FFFFFF50FFB8
:101C800000FF0CFFFFFF20FF00FF0AFFFFFF1FFF09
:101C90008DFF83FFFFFF70FF0FFF40FFFFFFF4FF8B
:101CA000E0FF22FFFFFF0FFF41FF18FFFFFF30FFA4
:101CB0008DFF83FFFFFF70FF0FFF40FFFFFFE4FF7B
:101CC000E0FF22FFFFFF0FFF42FF18FFFFFF40FF73
:101CD0008DFF83FFFFFF70FF0FFF40FFFFFFD4FF6B
:101CE000E0FF22FFFFFF0FFF47FF18FFFFFFA0FFEE
:101CF0008DFF83FFFFFF70FF0FFF40FFFFFFC4FF5B
:101D0000E0FF22FFFFFF0FFF46FF18FFFFFFD0FF9E
:101D10008DFF83FFFFFF70FF0FFF40FFFFFFB4FF4A
:101D2000E0FF22FFFFFF0FFF48FF18FFFFFFE0FF6C
:101D30008DFF83FFFFFF70FF0FFF40FFFFFFA4FF3A
:101D4000E0FF22FFFFFF0FFF4AFF18FFFFFF60FFCA
:101D50008DFF83FFFFFF70FF0FFF40FFFFFF94FF2A
:101D6000E0FF22FFFFFF0FFF4CFF18FFFFFF00FF08
:101D70008DFF83FFFFFF70FF0FFF40FFFFFF84FF1A
:101D8000E0FF22FFFFFF0FFF4DFF18FFFFFFE0FF07
:101D90008DFF83FFFFFF70FF0FFF40FFFFFF74FF0A
:101DA000E0FF22FFFFFF0FFF4FFF18FFFFFF20FFA5
:101DB0008DFF83FFFFFF70FF0FFF40FFFFFF64FFFA
:101DC000E0FF22FFFFFF0FFF4FFF18FFFFFFF0FFB5
:101DD0008DFF83FFFFFF70FF0EFF40FFFFFFF4FF4B
:101DE000E0FF22FFFFFF0FFF44FF18FFFFFF40FF50
:101DF0008DFF83FFFFFF70FF0EFF40FFFFFFE4FF3B
:101E0000E0FF22FFFFFF0FFF45FF18FFFFFF50FF1E
:101E10008DFF83FFFFFF70FF0AFF40FFFFFF04FFFE
:101E2000E0FF22FFFFFF0FFF3DFF18FFFFFFD0FF86
:101E30008DFF83FFFFFF70FF0AFF40FFFFFF14FFCE
:101E4000E0FF22FFFFFF0FFF3FFF18FFFFFF10FF24
:101E50008DFF83FFFFFF70FF0AFF40FFFFFF24FF9E
:101E6000E0FF22FFFFFF0FFF3FFF18FFFFFF80FF94
:101E70008DFF83FFFFFF70FF0AFF40FFFFFF34FF6E
:101E8000E0FF22FFFFFF0FFF3FFF18FFFFFFF0FF04
:101E90008DFF83FFFFFF70FF0AFF40FFFFFF44FF3E
:101EA000E0FF22FFFFFF0FFF40FF18FFFFFF60FF73
:101EB0008DFF83FFFFFF70FF47FF90FFFFFF00FFD5
:101EC00000FF48FFFFFF04FFA0FF23FFFFFF0FFFFE
:101ED00046FF90FFFFFF6AFF00FF0CFFFFFF20FFA0
:101EE00000FF0AFFFFFF1FFF8DFF83FFFFFF70FF53
:101EF00047FF90FFFFFF00FF00FF48FFFFFF04FFC9
:101F0000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFC9
:101F100000FF0CFFFFFF08FF00FF40FFFFFF00FF77
:101F2000FFFF93FFFFFFF0FF00FF40FFFFFF00FFF9
:101F300044FF90FFFFFF60FF00FF00FFFFFF00FF77
:101F400000FF00FFFFFF00FF00FF00FFFFFF00FF9B
:101F500000FF00FFFFFF00FF00FF00FFFFFF00FF8B
:101F600000FF00FFFFFF00FF00FF00FFFFFF00FF7B
:101F700000FF00FFFFFF00FF21FF40FFFFFF80FF8A
:101F8000FFFF93FFFFFFF0FF8DFF83FFFFFF70FF59
:101F900047FF90FFFFFF00FF00FF48FFFFFF04FF28
:101FA000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF29
:101FB00025FF40FFFFFF80FFFFFF93FFFFFFF0FFC4
:101FC0008DFF83FFFFFF70FF47FF90FFFFFF00FFC4
:101FD00000FF48FFFFFF04FFA0FF23FFFFFF0FFFED
:101FE00046FF90FFFFFF6AFFE9FF41FFFFFF80FF11
:101FF000FFFF93FFFFFFF0FF8DFF83FFFFFF70FFE9
:1020000047FF90FFFFFF00FF00FF48FFFFFF04FFB7
:10201000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFB8
:10202000EDFF41FFFFFF80FFFFFF93FFFFFFF0FF8A
:102030008DFF83FFFFFF70FF47FF90FFFFFF00FF53
:1020400000FF48FFFFFF04FFA0FF23FFFFFF0FFF7C
:1020500046FF90FFFFFF6AFF00FF40FFFFFF00FF0A
:1020600044FF90FFFFFF60FF00FF00FFFFFF00FF46
:1020700000FF00FFFFFF00FF00FF00FFFFFF00FF6A
:1020800000FF00FFFFFF00FFF1FF41FFFFFF80FFA8
:10209000FFFF93FFFFFFF0FF46FF84FFFFFF00FFFE
:1020A00000FF34FFFFFF08FF00FF60FFFFFF03FF9B
:1020B00000FF00FFFFFF00FF00FF00FFFFFF00FF2A
:1020C00000FF00FFFFFF00FF00FF00FFFFFF00FF1A
:1020D00046FF90FFFFFF60FFF7FF4FFFFFFFF4FF9A
:1020E00046FF90FFFFFF74FF8DFF83FFFFFF70FF30
:1020F00047FF90FFFFFF00FF00FF48FFFFFF04FFC7
:10210000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFC7
:1021100000FF0CFFFFFF20FF00FF0AFFFFFF1FFF74
:1021200046FF84FFFFFF00FF00FF34FFFFFF08FFB3
:1021300000FF34FFFFFF06FF00FF00FFFFFF00FF6F
:1021400000FF00FFFFFF00FF00FF00FFFFFF00FF99
:1021500000FF00FFFFFF00FF46FF80FFFFFF10FFB3
:1021600000FF00FFFFFF00FF00FF00FFFFFF00FF79
:1021700000FF00FFFFFF00FF00FF00FFFFFF00FF69
:1021800000FF68FFFFFF02FF00FF00FFFFFF00FFEF
:1021900000FF00FFFFFF00FF00FF00FFFFFF00FF49
:1021A00000FF00FFFFFF00FF00FF60FFFFFF22FFB7
:1021B00000FF00FFFFFF00FF00FF00FFFFFF00FF29
:1021C00000FF00FFFFFF00FF00FF00FFFFFF00FF19
:1021D00046FF90FFFFFF62FFF7FF4FFFFFFFF4FF97
:1021E00046FF90FFFFFF74FF8DFF83FFFFFF70FF2F
:1021F00047FF90FFFFFF00FF00FF48FFFFFF04FFC6
:10220000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFC6
:1022100000FF0CFFFFFF20FF00FF0AFFFFFF1FFF73
:1022200046FF88FFFFFF00FF00FF38FFFFFF08FFAA
:1022300000FF50FFFFFF03FF00FF00FFFFFF00FF55
:1022400000FF00FFFFFF00FF00FF00FFFFFF00FF98
:1022500000FF00FFFFFF00FF46FF90FFFFFF60FF52
:10226000F7FF4FFFFFFFF4FF46FF90FFFFFF74FFF4
:102270008DFF83FFFFFF70FF47FF90FFFFFF00FF11
:1022800000FF48FFFFFF04FFA0FF23FFFFFF0FFF3A
:1022900046FF90FFFFFF6AFF00FF0CFFFFFF20FFDC
:1022A00000FF0AFFFFFF1FFF46FF88FFFFFF00FF41
:1022B00000FF38FFFFFF08FF00FF38FFFFFF04FFAC
:1022C00000FF00FFFFFF00FF00FF00FFFFFF00FF18
:1022D00000FF00FFFFFF00FF00FF00FFFFFF00FF08
:1022E00046FF80FFFFFF10FF00FF58FFFFFF03FFC7
:1022F00000FF50FFFFFF23FF00FF00FFFFFF00FF75
:1023000000FF00FFFFFF00FF00FF00FFFFFF00FFD7
:1023100000FF00FFFFFF00FF46FF90FFFFFF62FF8F
:10232000F7FF4FFFFFFFF4FF46FF90FFFFFF74FF33
:102330008DFF83FFFFFF70FF47FF90FFFFFF00FF50
:1023400000FF48FFFFFF04FFA0FF23FFFFFF0FFF79
:1023500046FF90FFFFFF6AFF00FF0CFFFFFF20FF1B
:1023600000FF0AFFFFFF1FFF46FF80FFFFFF00FF88
:10237000FFFF93FFFFFFE0FFFFFF83FFFFFFE2FF91
:1023800046FF90FFFFFF62FFF7FF4FFFFFFFF4FFE5
:1023900046FF90FFFFFF74FF8DFF83FFFFFF70FF7D
:1023A00047FF90FFFFFF00FF00FF48FFFFFF04FF14
:1023B000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF15
:1023C00000FF0CFFFFFF20FF00FF0AFFFFFF1FFFC2
:1023D00003FF0DFFFFFF0FFF00FF00FFFFFF00FFE8
:1023E00000FF00FFFFFF00FF00FF00FFFFFF00FFF7
:1023F00000FF00FFFFFF00FF46FF90FFFFFF60FFB1
:102400000CFF0DFFFFFFF0FF00FF00FFFFFF00FFCD
:1024100000FF00FFFFFF00FF00FF00FFFFFF00FFC6
:1024200000FF00FFFFFF00FFF7FF4FFFFFFFF4FF7C
:1024300046FF90FFFFFF74FF8DFF83FFFFFF70FFDC
:1024400047FF90FFFFFF00FF00FF48FFFFFF04FF73
:10245000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF74
:1024600000FF0CFFFFFF20FF00FF0AFFFFFF1FFF21
:1024700046FF80FFFFFF02FF00FF00FFFFFF00FF9E
:1024800000FF00FFFFFF00FF00FF00FFFFFF00FF56
:1024900000FF00FFFFFF00FF00FF00FFFFFF00FF46
:1024A00000FF00FFFFFF00FF00FF00FFFFFF00FF36
:1024B00000FF00FFFFFF00FF46FF80FFFFFF13FF4D
:1024C00000FF40FFFFFF00FF11FF90FFFFFF60FFD5
:1024D0008DFF93FFFFFFD0FF11FF90FFFFFFF2FF83
:1024E00011FF90FFFFFFE3FFF7FF4FFFFFFFF4FF38
:1024F00046FF90FFFFFF74FF8DFF83FFFFFF70FF1C
:1025000047FF90FFFFFF00FF00FF48FFFFFF04FFB2
:10251000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFB3
:1025200000FF0CFFFFFF20FF00FF0AFFFFFF1FFF60
:1025300046FF84FFFFFF00FF00FF34FFFFFF08FF9F
:1025400000FF34FFFFFF06FF00FF00FFFFFF00FF5B
:1025500000FF00FFFFFF00FF00FF00FFFFFF00FF85
:1025600000FF00FFFFFF00FF46FF80FFFFFF10FF9F
:10257000FFFF93FFFFFFE0FF00FF60FFFFFF22FF71
:1025800067FF40FFFFFF40FFFFFF93FFFFFFE0FFFC
:1025900000FF00FFFFFF00FF00FF00FFFFFF00FF45
:1025A00000FF00FFFFFF00FF00FF00FFFFFF00FF35
:1025B00046FF90FFFFFF62FFF7FF4FFFFFFFF4FFB3
:1025C00046FF90FFFFFF74FF8DFF83FFFFFF70FF4B
:1025D00047FF90FFFFFF00FF00FF48FFFFFF04FFE2
:1025E000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFE3
:1025F00000FF0CFFFFFF20FF00FF0AFFFFFF1FFF90
:1026000046FF84FFFFFF00FF00FF34FFFFFF08FFCE
:1026100000FF34FFFFFF06FF00FF00FFFFFF00FF8A
:1026200000FF00FFFFFF00FF46FF80FFFFFF10FFDE
:1026300000FF00FFFFFF00FF00FF00FFFFFF00FFA4
:1026400000FF00FFFFFF00FF00FF00FFFFFF00FF94
:1026500046FF80FFFFFF23FFFFFF93FFFFFFE0FF29
:1026600000FF68FFFFFF32FF00FF60FFFFFF72FF08
:1026700067FF40FFFFFF40FFFFFF93FFFFFFE0FF0B
:1026800000FF00FFFFFF00FF00FF00FFFFFF00FF54
:1026900000FF00FFFFFF00FF00FF00FFFFFF00FF44
:1026A00046FF90FFFFFF67FFF7FF4FFFFFFFF4FFBD
:1026B00046FF90FFFFFF74FF8DFF83FFFFFF70FF5A
:1026C00047FF90FFFFFF00FF00FF48FFFFFF04FFF1
:1026D000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFF2
:1026E00000FF0CFFFFFF20FF00FF0AFFFFFF1FFF9F
:1026F00046FF80FFFFFF05FF03FF0DFFFFFF0FFFFA
:1027000000FF00FFFFFF00FF00FF00FFFFFF00FFD3
:1027100000FF00FFFFFF00FF00FF00FFFFFF00FFC3
:102720000CFF0DFFFFFFF5FF00FF00FFFFFF00FFA5
:1027300000FF00FFFFFF00FF00FF00FFFFFF00FFA3
:1027400000FF00FFFFFF00FFF7FF4FFFFFFFF4FF59
:1027500046FF90FFFFFF74FF8DFF83FFFFFF70FFB9
:1027600047FF90FFFFFF00FF00FF48FFFFFF04FF50
:10277000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF51
:1027800000FF0CFFFFFF20FF00FF0AFFFFFF1FFFFE
:1027900046FF80FFFFFF00FF8DFF93FFFFFFC0FF9D
:1027A0008DFF83FFFFFFC7FF46FF90FFFFFF67FF1F
:1027B000F7FF4FFFFFFFF4FF46FF90FFFFFF74FF9F
:1027C0008DFF83FFFFFF70FF47FF90FFFFFF00FFBC
:1027D00000FF48FFFFFF04FFA0FF23FFFFFF0FFFE5
:1027E00046FF90FFFFFF6AFF00FF0CFFFFFF20FF87
:1027F00000FF0AFFFFFF1FFF46FF80FFFFFF00FFF4
:102800008DFF93FFFFFFE0FF8DFF83FFFFFFE7FFDB
:1028100000FF00FFFFFF00FF00FF00FFFFFF00FFC2
:1028200000FF00FFFFFF00FF00FF00FFFFFF00FFB2
:1028300046FF90FFFFFF67FFF7FF4FFFFFFFF4FF2B
:1028400046FF90FFFFFF74FF8DFF83FFFFFF70FFC8
:1028500047FF90FFFFFF00FF00FF48FFFFFF04FF5F
:10286000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF60
:1028700000FF0CFFFFFF20FF00FF0AFFFFFF1FFF0D
:102880008DFF83FFFFFFD0FF00FF40FFFFFF24FF0E
:10289000A0FF23FFFFFF0FFF11FF90FFFFFF6AFF65
:1028A00000FF40FFFFFF14FF18FF23FFFFFF0FFF94
:1028B00051FF14FFFFFF81FF90FF80FFFFFF60FFCC
:1028C00080FF23FFFFFF0FFF8DFF83FFFFFFD0FF80
:1028D00000FF40FFFFFF14FFA0FF23FFFFFF0FFFDC
:1028E00011FF90FFFFFF6AFF30FF0CFFFFFF00FFAB
:1028F00000FF40FFFFFF16FF10FF40FFFFFF07FF35
:1029000090FF34FFFFFF71FF00FF34FFFFFF09FF5F
:102910000FFF40FFFFFFF5FF00FF60FFFFFF07FF16
:1029200088FF63FFFFFF27FFE8FF60FFFFFF07FF50
:1029300062FF61FFFFFF27FF88FF2BFFFFFF8BFF79
:10294000E8FF60FFFFFF07FF62FF61FFFFFF17FF68
:1029500088FF2FFFFFFFFBFF89FF23FFFFFF0FFF14
:1029600098FF20FFFFFF0FFFEAFF20FFFFFF0FFF91
:1029700000FF0DFFFFFFABFF00FF0DFFFFFFB8FFE4
:1029800000FF0DFFFFFFCFFF62FF21FFFFFF0FFFE3
:1029900010FF22FFFFFF0FFF62FF21FFFFFF0FFF6E
:1029A00000FF40FFFFFF24FF90FF80FFFFFF60FF5D
:1029B00080FF23FFFFFF0FFF51FF18FFFFFF00FF06
:1029C0008BFF93FFFFFFEBFF8BFF93FFFFFFFCFFEE
:1029D00000FF0AFFFFFF0FFF51FF1CFFFFFF0FFF6C
:1029E0008DFF93FFFFFFACFF82FF3CFFFFFF45FF22
:1029F00054FF14FFFFFF2EFFFFFF3FFFFFFFF5FF18
:102A000054FF14FFFFFF1EFF00FF00FFFFFF00FF4A
:102A100000FF00FFFFFF00FF51FF1CFFFFFF0FFF44
:102A200000FF0DFFFFFF0CFF8DFF83FFFFFFA4FFE3
:102A3000E0FF22FFFFFF0FFF53FF18FFFFFFB3FF71
:102A40008DFF83FFFFFFD0FF00FF40FFFFFF24FF4C
:102A5000A0FF23FFFFFF0FFF00FF0DFFFFFFBAFFE7
:102A60008BFF83FFFFFFF5FF11FF90FFFFFF6BFF61
:102A700000FF40FFFFFF14FF18FF23FFFFFF0FFFC2
:102A800055FF14FFFFFF21FF90FF80FFFFFF60FF56
:102A900080FF23FFFFFF0FFF00FF40FFFFFF20FF2E
:102AA00000FF40FFFFFF01FF8BFF83FFFFFFE4FFFD
:102AB0008BFF83FFFFFFF5FF08FF0CFFFFFF00FF09
:102AC00060FF22FFFFFF0FFF49FF2AFFFFFFEAFF22
:102AD00000FF0DFFFFFF4EFF8BFF93FFFFFFEEFF99
:102AE00000FF0DFFFFFF5AFF8BFF93FFFFFFFAFF71
:102AF0008DFF83FFFFFF20FF8DFF83FFFFFF31FF6F
:102B0000E0FF22FFFFFF0FFFC9FF2AFFFFFFEAFFE1
:102B100054FF18FFFFFFD5FF00FF0DFFFFFF4EFF23
:102B200000FF0DFFFFFF5AFF82FF4FFFFFFFF0FF87
:102B3000FFFF4FFFFFFFF1FFE0FF22FFFFFF0FFF4F
:102B4000C9FF2AFFFFFFEAFF56FF18FFFFFFB4FF90
:102B500054FF18FFFFFFDFFF00FF40FFFFFF20FFD4
:102B600047FF90FFFFFF20FF0CFF0CFFFFFF00FF60
:102B700002FF40FFFFFF60FF11FF90FFFFFF20FFFC
:102B800016FF18FFFFFF4FFF8DFF83FFFFFFD0FFF2
:102B900000FF40FFFFFF24FFA0FF23FFFFFF0FFF09
:102BA00011FF90FFFFFF6AFF00FF40FFFFFF14FFD0
:102BB00018FF23FFFFFF0FFF57FF14FFFFFF91FFD9
:102BC00090FF80FFFFFF60FF80FF23FFFFFF0FFFED
:102BD0008DFF83FFFFFFD0FF00FF40FFFFFF14FFCB
:102BE000A0FF23FFFFFF0FFF11FF90FFFFFF6AFF12
:102BF00030FF0CFFFFFF00FF00FF40FFFFFF16FF4D
:102C000010FF40FFFFFF07FF90FF34FFFFFF71FF42
:102C100000FF34FFFFFF09FF0FFF40FFFFFFF5FF3D
:102C200000FF60FFFFFF07FF88FF63FFFFFF27FF35
:102C3000E8FF60FFFFFF07FF62FF61FFFFFF27FF65
:102C400088FF2BFFFFFF8BFFE8FF60FFFFFF07FF01
:102C500062FF61FFFFFF17FF88FF2FFFFFFFFBFFF2
:102C600089FF23FFFFFF0FFF98FF20FFFFFF0FFFEC
:102C7000EAFF20FFFFFF0FFF00FF0DFFFFFFABFF8D
:102C800000FF0DFFFFFFB8FF00FF0DFFFFFFCFFFAD
:102C900062FF21FFFFFF0FFF10FF22FFFFFF0FFF6B
:102CA00062FF21FFFFFF0FFF00FF40FFFFFF24FF38
:102CB00090FF80FFFFFF60FF80FF23FFFFFF0FFFFC
:102CC00057FF18FFFFFF10FF8BFF93FFFFFFEBFF86
:102CD0008BFF93FFFFFFFCFF5CFF1CFFFFFF3FFF2D
:102CE00000FF0AFFFFFF0FFF57FF1CFFFFFF1FFF43
:102CF0008DFF93FFFFFFACFF82FF3CFFFFFF45FF0F
:102D00005AFF14FFFFFF4EFFFFFF3FFFFFFFF5FFDE
:102D10005AFF14FFFFFF3EFF00FF00FFFFFF00FF11
:102D200000FF00FFFFFF00FF57FF1CFFFFFF1FFF1B
:102D300000FF0DFFFFFF0CFF8DFF83FFFFFFA4FFD0
:102D4000E0FF22FFFFFF0FFF59FF18FFFFFFD3FF38
:102D50005CFF1CFFFFFF3FFF8DFF83FFFFFFD0FFE6
:102D600000FF40FFFFFF24FFA0FF23FFFFFF0FFF37
:102D700000FF0DFFFFFFBAFF8BFF83FFFFFFF5FF93
:102D80005CFF1CFFFFFF3FFF11FF90FFFFFF6BFF8A
:102D900000FF40FFFFFF14FF18FF23FFFFFF0FFF9F
:102DA0005BFF14FFFFFF61FF90FF80FFFFFF60FFED
:102DB00080FF23FFFFFF0FFF00FF40FFFFFF20FF0B
:102DC00000FF40FFFFFF01FF8BFF83FFFFFFE4FFDA
:102DD0008BFF83FFFFFFF5FF08FF0CFFFFFF00FFE6
:102DE00060FF22FFFFFF0FFF49FF2AFFFFFFEAFFFF
:102DF00000FF0DFFFFFF4EFF8BFF93FFFFFFEEFF76
:102E00008BFF93FFFFFFFAFF5EFF1CFFFFFF0FFF2B
:102E10005BFF18FFFFFF0FFF8BFF83FFFFFF20FF0C
:102E200078FF22FFFFFF0FFF0DFF18FFFFFF05FFD9
:102E300000FF0AFFFFFF0FFF08FF0CFFFFFF00FF6F
:102E400000FF40FFFFFF14FF00FF40FFFFFF05FFF3
:102E50008BFF83FFFFFFE0FF8BFF83FFFFFFF1FF8F
:102E600060FF22FFFFFF0FFF49FF2AFFFFFFEAFF7E
:102E70008BFF93FFFFFFFAFF8BFF93FFFFFFEEFF38
:102E80000CFF0CFFFFFF00FF00FF0AFFFFFF0FFF1B
:102E900008FF0CFFFFFF00FF00FF40FFFFFF14FFD4
:102EA00000FF40FFFFFF05FF8BFF83FFFFFFE0FFF9
:102EB0008BFF83FFFFFFF1FF60FF22FFFFFF0FFF8C
:102EC00049FF2AFFFFFFEAFF8BFF93FFFFFFFAFF97
:102ED0008BFF93FFFFFFEEFF0CFF0CFFFFFF00FFD8
:102EE0008DFF83FFFFFF40FF78FF22FFFFFF0FFFF3
:102EF0005EFF1CFFFFFF04FF00FF0AFFFFFF0FFF45
:102F000008FF0CFFFFFF00FF8DFF83FFFFFF50FF57
:102F100078FF22FFFFFF0FFF5FFF1CFFFFFF54FF43
:102F20000FFF40FFFFFFF5FF90FF80FFFFFFA8FFAF
:102F300010FF0FFFFFFF08FF90FF80FFFFFF90FFD4
:102F400088FF27FFFFFF0FFFB6FF27FFFFFF0FFFE1
:102F50008BFF83FFFFFFFAFFF2FF22FFFFFF0FFF50
:102F600000FF0DFFFFFF0AFF00FF40FFFFFF14FF00
:102F7000E2FF22FFFFFF0FFF74FF18FFFFFFE2FFDA
:102F800038FF23FFFFFF0FFF00FF40FFFFFF24FF7D
:102F9000E2FF22FFFFFF0FFF74FF18FFFFFFE2FFBA
:102FA00000FF0AFFFFFF0FFF0FFF40FFFFFFF5FFCE
:102FB00090FF80FFFFFF80FF8BFF83FFFFFFE2FF9B
:102FC00088FF27FFFFFF0FFF98FF20FFFFFF0FFF86
:102FD00010FF40FFFFFF07FFE8FF20FFFFFF0FFF8D
:102FE00000FF0DFFFFFFACFFF2FF22FFFFFF0FFF0F
:102FF00000FF0DFFFFFF0AFF01FF40FFFFFF04FF7F
:10300000E2FF22FFFFFF0FFF74FF18FFFFFFE2FF49
:1030100038FF23FFFFFF0FFF02FF40FFFFFF04FF0A
:10302000E2FF22FFFFFF0FFF74FF18FFFFFFE2FF29
:1030300000FF0AFFFFFF0FFF00FF34FFFFFF08FF45
:1030400000FF34FFFFFFD4FF00FF34FFFFFF85FFC9
:10305000FFFF4FFFFFFF89FF00FF09FFFFFF01FF99
:1030600089FF83FFFFFFB8FF00FF0EFFFFFF0FFF89
:1030700000FF0DFFFFFF4EFFA7FF23FFFFFF0FFF26
:1030800000FF68FFFFFFA3FF89FF83FFFFFFA8FF8B
:1030900000FF0EFFFFFF0FFF00FF0DFFFFFF4EFFC2
:1030A000A7FF23FFFFFF0FFF00FF68FFFFFFA3FF46
:1030B00000FF09FFFFFF03FF8BFF83FFFFFFB0FF50
:1030C00000FF68FFFFFF00FF00FF0AFFFFFF0FFF89
:1030D00002FF35FFFFFF00FF00FF34FFFFFF08FF87
:1030E00000FF34FFFFFF26FF89FF83FFFFFFD8FFAC
:1030F00000FF0EFFFFFF0FFF00FF0DFFFFFF4EFF62
:10310000A7FF23FFFFFF0FFF00FF68FFFFFFA3FFE5
:1031100089FF83FFFFFFC8FF00FF0EFFFFFF0FFFC8
:1031200000FF0DFFFFFF4EFFA7FF23FFFFFF0FFF75
:1031300000FF68FFFFFFA3FF00FF09FFFFFF03FF82
:103140008BFF83FFFFFFD0FF00FF68FFFFFF02FF41
:1031500001FF40FFFFFF80FF00FF68FFFFFF02FF4E
:1031600000FF40FFFFFF20FF00FF68FFFFFF03FF9E
:1031700000FF0AFFFFFF0FFF00FF40FFFFFF10FFF0
:103180008BFF93FFFFFF40FF30FF40FFFFFF00FF7B
:1031900049FF90FFFFFF40FF00FF0AFFFFFF0FFF07
:1031A00000FF40FFFFFF60FF00FF91FFFFFFF0FF08
:1031B00000FF0AFFFFFF0FFF01FF42FFFFFF80FF3D
:1031C00000FF91FFFFFF70FF07FF42FFFFFF80FF3F
:1031D00003FF91FFFFFF70FF02FF42FFFFFF00FFB1
:1031E00000FF91FFFFFFF0FF08FF42FFFFFF00FF1E
:1031F00003FF91FFFFFFF0FF00FF40FFFFFF20FFF5
:1032000001FF91FFFFFF70FF00FF40FFFFFF20FF66
:1032100004FF91FFFFFF70FF00FF0AFFFFFF0FFF9A
:1032200004FF42FFFFFF00FF49FF90FFFFFF20FF69
:1032300062FF1CFFFFFFFFFF00FF0AFFFFFF0FFF02
:1032400000FF40FFFFFF20FF00FF91FFFFFFF0FFA7
:1032500001FF42FFFFFF00FF49FF90FFFFFF20FF3C
:1032600062FF1CFFFFFFFFFF00FF0AFFFFFF0FFFD2
:1032700000FF40FFFFFF40FF8BFF93FFFFFF80FF3A
:1032800005FF35FFFFFF00FF92FF3BFFFFFF00FF41
:1032900000FF34FFFFFF08FF00FF38FFFFFF08FFBC
:1032A00000FF3CFFFFFF65FF65FF14FFFFFF9EFF70
:1032B00000FF60FFFFFF03FF00FF60FFFFFF13FF42
:1032C00000FF78FFFFFF13FF00FF78FFFFFF03FF02
:1032D00001FF42FFFFFF00FF49FF90FFFFFF20FFBC
:1032E00062FF1CFFFFFFFFFF05FF81FFFFFFC0FF25
:1032F00078FF22FFFFFF0FFF21FF18FFFFFF71FF85
:1033000000FF0AFFFFFF0FFF49FF80FFFFFF48FF9D
:1033100010FF0FFFFFFF03FF66FF23FFFFFF0FFFFD
:1033200074FF18FFFFFF54FF86FF83FFFFFFC0FFFE
:1033300049FF90FFFFFF20FF62FF1CFFFFFFFFFF21
:1033400086FF83FFFFFF80FF01FF40FFFFFF04FFB9
:10335000E0FF22FFFFFF0FFF86FF93FFFFFF8AFFC3
:1033600067FF1CFFFFFF00FF86FF87FFFFFFD0FF07
:1033700075FF1CFFFFFF1FFF00FF0AFFFFFF0FFF8E
:1033800000FF48FFFFFF00FF82FF93FFFFFF40FFAA
:1033900000FF0AFFFFFF0FFF08FF0CFFFFFF00FF0A
:1033A00086FF8BFFFFFFB0FF00FF38FFFFFF08FF26
:1033B00000FF38FFFFFFF4FFFFFF4FFFFFFF89FF14
:1033C0008DFF83FFFFFF60FF89FF83FFFFFF44FF47
:1033D00000FF40FFFFFF01FF89FF83FFFFFF55FF55
:1033E00060FF26FFFFFF0FFF49FF22FFFFFF0FFFD8
:1033F00000FF78FFFFFFA3FF10FF22FFFFFF0FFF7B
:1034000000FF78FFFFFFA0FF8DFF83FFFFFF60FF3E
:1034100089FF83FFFFFF24FF00FF40FFFFFF01FF45
:1034200089FF83FFFFFF35FF60FF26FFFFFF0FFFD0
:1034300049FF22FFFFFF0FFF00FF78FFFFFFA3FF01
:1034400010FF22FFFFFF0FFF00FF78FFFFFFA3FF2A
:103450008DFF83FFFFFF60FF20FF40FFFFFF04FFA2
:1034600060FF22FFFFFF0FFF8DFF93FFFFFF6AFF4B
:103470000CFF0CFFFFFF00FF00FF0AFFFFFF0FFF25
:1034800008FF0CFFFFFF00FF86FF87FFFFFFB0FF75
:1034900000FF34FFFFFF08FF01FF34FFFFFF04FFC1
:1034A00000FF34FFFFFF35FFFFFF4FFFFFFF89FFE6
:1034B00000FF09FFFFFF01FF87FF8BFFFFFFE0FF1A
:1034C00000FF38FFFFFF88FF00FF70FFFFFF03FFD3
:1034D00000FF68FFFFFF00FF00FF70FFFFFF03FF1B
:1034E00000FF68FFFFFF03FF87FF9BFFFFFFE0FF79
:1034F0000CFF0CFFFFFF00FF00FF0AFFFFFF0FFFA5
:1035000001FF3CFFFFFF05FF6AFF14FFFFFF9EFF67
:1035100067FF1CFFFFFF3FFF69FF1CFFFFFF0FFF5F
:1035200066FF1CFFFFFF1FFF38FF22FFFFFF0FFF9B
:103530006AFF14FFFFFF85FF8BFF83FFFFFF40FF44
:1035400078FF22FFFFFF0FFF00FF00FFFFFF00FFDC
:1035500000FF0AFFFFFF0FFF82FF83FFFFFF40FF17
:1035600078FF22FFFFFF0FFF6AFF1CFFFFFFF4FF42
:1035700000FF0AFFFFFF0FFF00FF40FFFFFF10FFEC
:1035800047FF90FFFFFF20FF87FF83FFFFFFF0FF54
:1035900086FF93FFFFFF80FF00FF40FFFFFF00FF5C
:1035A0008DFF93FFFFFF60FF82FF93FFFFFF40FF50
:1035B00086FF87FFFFFF90FF02FF34FFFFFF08FF3A
:1035C00000FF60FFFFFF03FF89FF93FFFFFF20FF66
:1035D00000FF60FFFFFF03FF89FF93FFFFFF30FF46
:1035E00000FF60FFFFFF03FF89FF93FFFFFF40FF26
:1035F00000FF60FFFFFF03FF89FF93FFFFFF50FF06
:1036000086FF97FFFFFF90FF00FF0AFFFFFF0FFFFE
:1036100000FF34FFFFFF64FF00FF34FFFFFF35FFB3
:1036200001FF34FFFFFF96FF00FF38FFFFFF34FF6D
:1036300000FF38FFFFFF65FF01FF38FFFFFF96FF28
:1036400000FF38FFFFFF08FF02FF34FFFFFF49FFC5
:1036500002FF38FFFFFF49FF10FF40FFFFFF06FF9B
:1036600010FF40FFFFFF02FF30FF0CFFFFFF00FFD6
:1036700000FF3CFFFFFF25FF6DFF14FFFFFFBEFFB4
:1036800098FF50FFFFFF73FF88FF50FFFFFF73FF9E
:1036900083FF68FFFFFFC5FF88FF68FFFFFFC4FFD0
:1036A00083FF68FFFFFFC5FF00FF68FFFFFFC6FF46
:1036B00098FF50FFFFFF73FF88FF50FFFFFF73FF6E
:1036C00083FF78FFFFFFC4FF88FF78FFFFFFC5FF80
:1036D00083FF78FFFFFFC4FF00FF78FFFFFFC6FFF7
:1036E00098FF50FFFFFF73FF88FF50FFFFFF73FF3E
:1036F00083FF68FFFFFFC5FF88FF68FFFFFFC4FF70
:1037000083FF68FFFFFFC5FF00FF68FFFFFFC6FFE5
:1037100000FF3CFFFFFF25FF6EFF14FFFFFF8EFF42
:1037200098FF50FFFFFF73FF88FF50FFFFFF73FFFD
:1037300083FF78FFFFFFC4FF88FF78FFFFFFC4FF10
:1037400000FF78FFFFFFC4FF20FF0CFFFFFF00FF1B
:1037500000FF0AFFFFFF0FFF00FF34FFFFFFE9FF3D
:1037600001FF38FFFFFF28FF01FF38FFFFFF29FFA0
:1037700000FF38FFFFFF66FF00FF38FFFFFF34FF49
:1037800000FF38FFFFFF75FF10FF40FFFFFF06FF40
:1037900000FF41FFFFFF07FF30FF0CFFFFFF00FFAF
:1037A00098FF70FFFFFF20FF00FF3CFFFFFF25FF9A
:1037B00070FF14FFFFFF2EFF80FF70FFFFFF42FF2F
:1037C00063FF72FFFFFF20FF80FF68FFFFFFA7FF7F
:1037D00000FF70FFFFFF41FF63FF72FFFFFF24FF49
:1037E00080FF68FFFFFFA7FF00FF70FFFFFF46FF9E
:1037F00063FF72FFFFFF24FF80FF68FFFFFFA7FF4B
:1038000000FF70FFFFFF45FF63FF72FFFFFF20FF18
:1038100000FF68FFFFFFA7FF80FF70FFFFFF42FF71
:1038200063FF72FFFFFF20FF80FF70FFFFFF41FF7C
:1038300063FF6AFFFFFFA7FF00FF70FFFFFF24FF8A
:1038400080FF68FFFFFFA7FF00FF70FFFFFF44FF3F
:1038500063FF72FFFFFF24FF80FF68FFFFFFA7FFEA
:10386000F0FF40FFFFFF05FF00FF4FFFFFFF04FFDA
:1038700000FF0DFFFFFF0BFF80FF27FFFFFF0FFF84
:1038800088FF23FFFFFF0FFFEAFF20FFFFFF0FFF6F
:1038900074FF22FFFFFF0FFF00FF68FFFFFFA7FF7E
:1038A00000FF70FFFFFF24FF80FF70FFFFFF44FF5A
:1038B00063FF72FFFFFF24FF80FF68FFFFFFA7FF8A
:1038C00000FF4FFFFFFF04FF00FF0DFFFFFF0BFF97
:1038D00080FF27FFFFFF0FFF88FF23FFFFFF0FFF82
:1038E000EAFF20FFFFFF0FFF74FF22FFFFFF0FFF24
:1038F00000FF68FFFFFFA7FF00FF0AFFFFFF0FFFAA
:1039000038FF22FFFFFF0FFF72FF14FFFFFF35FF9D
:103910008BFF83FFFFFF30FF78FF22FFFFFF0FFFCA
:1039200000FF0AFFFFFF0FFF0EFF40FFFFFF00FF3A
:1039300010FF90FFFFFF10FF08FF40FFFFFF00FF99
:1039400010FF90FFFFFF90FF02FF40FFFFFF40FFCF
:1039500011FF90FFFFFF20FF00FF40FFFFFF00FF70
:1039600010FF90FFFFFFB0FFB0FF40FFFFFF00FF21
:1039700047FF90FFFFFF50FF30FF40FFFFFF00FFBA
:1039800047FF90FFFFFF40FF78FF42FFFFFF50FF20
:1039900048FF90FFFFFFA0FF40FF40FFFFFF00FF39
:1039A00049FF90FFFFFF70FF18FF40FFFFFF00FF80
:1039B00047FF90FFFFFF70FF18FF40FFFFFF10FF62
:1039C00047FF90FFFFFF70FF18FF40FFFFFF00FF62
:1039D00047FF90FFFFFF70FF00FF40FFFFFF00FF6A
:1039E00011FF90FFFFFF60FF8DFF93FFFFFFD0FFF0
:1039F0000BFF40FFFFFF80FF11FF90FFFFFFF0FF75
:103A000000FF40FFFFFF10FF11FF90FFFFFFE0FFEF
:103A100000FF48FFFFFF00FF00FF93FFFFFF00FFD5
:103A200000FF0AFFFFFF0FFF08FF40FFFFFF00FF3F
:103A300047FF90FFFFFF20FF22FF18FFFFFF9FFFC0
:103A400000FF48FFFFFF10FF86FF93FFFFFF70FF9F
:103A500022FF18FFFFFF9FFF00FF48FFFFFF00FF4F
:103A600086FF93FFFFFF70FF22FF18FFFFFF9FFFFE
:103A700000FF48FFFFFF20FF86FF93FFFFFF70FF5F
:103A800022FF18FFFFFF9FFF00FF34FFFFFF48FFEB
:103A900000FF60FFFFFF03FF86FF93FFFFFFB0FF04
:103AA00000FF60FFFFFF03FF86FF93FFFFFFC0FFE4
:103AB00086FF97FFFFFFD0FF00FF0AFFFFFF0FFF0A
:103AC00080FF37FFFFFF02FF84FF3BFFFFFF02FF86
:103AD00000FF60FFFFFF0BFF0CFF0DFFFFFF90FFDC
:103AE00000FF70FFFFFF0BFF0CFF0DFFFFFFB0FF9C
:103AF00088FF37FFFFFF03FF8CFF3BFFFFFF03FF44
:103B000000FF40FFFFFF01FF8BFF93FFFFFF51FF0F
:103B100082FF43FFFFFF80FF8BFF93FFFFFF60FFEC
:103B200000FF34FFFFFF89FF00FF40FFFFFF00FFA2
:103B30000CFF0DFFFFFF80FF0CFF0DFFFFFFA0FF3D
:103B400000FF0AFFFFFF0FFF80FF37FFFFFF00FFAF
:103B500000FF34FFFFFF08FF02FF3CFFFFFF45FFB0
:103B600076FF14FFFFFFDEFF00FFA0FFFFFF03FF54
:103B700084FF37FFFFFF00FF00FF34FFFFFF08FF58
:103B800002FF3CFFFFFF45FF77FF14FFFFFF2EFF03
:103B900000FFA0FFFFFF03FF7EFF38FFFFFF00FFD6
:103BA00000FF38FFFFFF08FF00FF3CFFFFFFE5FFBE
:103BB00077FF14FFFFFF8EFF00FF40FFFFFF00FFB6
:103BC00000FF58FFFFFF03FF00FF0AFFFFFF0FFF8B
:103BD00064FF1CFFFFFF4FFF38FF22FFFFFF0FFFB7
:103BE00077FF14FFFFFFE5FF8BFF83FFFFFF40FF21
:103BF00078FF22FFFFFF0FFF64FF1CFFFFFF8FFF17
:103C000038FF22FFFFFF0FFF78FF14FFFFFF35FF94
:103C10008BFF83FFFFFF40FF78FF22FFFFFF0FFFB7
:103C200000FF0AFFFFFF0FFF00FF34FFFFFF09FF48
:103C300000FF34FFFFFF85FF00FF34FFFFFF56FF4B
:103C400000FF09FFFFFF06FF20FF40FFFFFF00FF0F
:103C500001FF40FFFFFFC1FF00FF40FFFFFF44FFE8
:103C600000FF68FFFFFF05FF00FF68FFFFFF15FF74
:103C700000FF68FFFFFF05FF00FF68FFFFFF45FF34
:103C800000FF0AFFFFFF0FFF86FF87FFFFFFF0FF28
:103C900086FF8BFFFFFFE0FF00FF34FFFFFFC8FF41
:103CA00000FF38FFFFFFC8FF00FF60FFFFFF03FFBB
:103CB00000FF60FFFFFF13FF00FF78FFFFFF13FF10
:103CC00000FF78FFFFFF03FF86FF97FFFFFFF0FF76
:103CD00086FF9BFFFFFFE0FF05FF81FFFFFFC0FFA7
:103CE00078FF22FFFFFF0FFF21FF18FFFFFF71FF8B
:103CF00000FF0AFFFFFF0FFF7FFF38FFFFFF01FFFD
:103D000000FF38FFFFFF09FF00FF38FFFFFF06FF3E
:103D10007EFF40FFFFFF00FF00FF40FFFFFFB1FFFE
:103D200008FF0CFFFFFF00FF00FF3CFFFFFFC5FF88
:103D30007AFF14FFFFFFBEFF00FF50FFFFFF46FFAB
:103D4000E1FF22FFFFFF0FFF7AFF1CFFFFFFE0FFF5
:103D500060FF22FFFFFF0FFF00FF58FFFFFFA7FFDD
:103D60000CFF0CFFFFFF00FF00FF0AFFFFFF0FFF2C
:103D700000FF40FFFFFFC4FF00FF0AFFFFFF0FFF30
:103D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43
:043D9000FFFFFFFF33
:00000001FF
ams.h>
#include <sound/soc.h>
#include <sound/soc-dapm.h>
#include <sound/initval.h>
#include <sound/tlv.h>
#include <asm/div64.h>
#include "wm8978.h"
static struct snd_soc_codec *wm8978_codec;
/* wm8978 register cache. Note that register 0 is not included in the cache. */
static const u16 wm8978_reg[WM8978_CACHEREGNUM] = {
0x0000, 0x0000, 0x0000, 0x0000, /* 0x00...0x03 */
0x0050, 0x0000, 0x0140, 0x0000, /* 0x04...0x07 */
0x0000, 0x0000, 0x0000, 0x00ff, /* 0x08...0x0b */
0x00ff, 0x0000, 0x0100, 0x00ff, /* 0x0c...0x0f */
0x00ff, 0x0000, 0x012c, 0x002c, /* 0x10...0x13 */
0x002c, 0x002c, 0x002c, 0x0000, /* 0x14...0x17 */
0x0032, 0x0000, 0x0000, 0x0000, /* 0x18...0x1b */
0x0000, 0x0000, 0x0000, 0x0000, /* 0x1c...0x1f */
0x0038, 0x000b, 0x0032, 0x0000, /* 0x20...0x23 */
0x0008, 0x000c, 0x0093, 0x00e9, /* 0x24...0x27 */
0x0000, 0x0000, 0x0000, 0x0000, /* 0x28...0x2b */
0x0033, 0x0010, 0x0010, 0x0100, /* 0x2c...0x2f */
0x0100, 0x0002, 0x0001, 0x0001, /* 0x30...0x33 */
0x0039, 0x0039, 0x0039, 0x0039, /* 0x34...0x37 */
0x0001, 0x0001, /* 0x38...0x3b */
};
/* codec private data */
struct wm8978_priv {
struct snd_soc_codec codec;
unsigned int f_pllout;
unsigned int f_mclk;
unsigned int f_256fs;
unsigned int f_opclk;
enum wm8978_sysclk_src sysclk;
u16 reg_cache[WM8978_CACHEREGNUM];
};
static const char *wm8978_companding[] = {"Off", "NC", "u-law", "A-law"};
static const char *wm8978_eqmode[] = {"Capture", "Playback"};
static const char *wm8978_bw[] = {"Narrow", "Wide"};
static const char *wm8978_eq1[] = {"80Hz", "105Hz", "135Hz", "175Hz"};
static const char *wm8978_eq2[] = {"230Hz", "300Hz", "385Hz", "500Hz"};
static const char *wm8978_eq3[] = {"650Hz", "850Hz", "1.1kHz", "1.4kHz"};
static const char *wm8978_eq4[] = {"1.8kHz", "2.4kHz", "3.2kHz", "4.1kHz"};
static const char *wm8978_eq5[] = {"5.3kHz", "6.9kHz", "9kHz", "11.7kHz"};
static const char *wm8978_alc3[] = {"ALC", "Limiter"};
static const char *wm8978_alc1[] = {"Off", "Right", "Left", "Both"};
static const SOC_ENUM_SINGLE_DECL(adc_compand, WM8978_COMPANDING_CONTROL, 1,
wm8978_companding);
static const SOC_ENUM_SINGLE_DECL(dac_compand, WM8978_COMPANDING_CONTROL, 3,
wm8978_companding);
static const SOC_ENUM_SINGLE_DECL(eqmode, WM8978_EQ1, 8, wm8978_eqmode);
static const SOC_ENUM_SINGLE_DECL(eq1, WM8978_EQ1, 5, wm8978_eq1);
static const SOC_ENUM_SINGLE_DECL(eq2bw, WM8978_EQ2, 8, wm8978_bw);
static const SOC_ENUM_SINGLE_DECL(eq2, WM8978_EQ2, 5, wm8978_eq2);
static const SOC_ENUM_SINGLE_DECL(eq3bw, WM8978_EQ3, 8, wm8978_bw);
static const SOC_ENUM_SINGLE_DECL(eq3, WM8978_EQ3, 5, wm8978_eq3);
static const SOC_ENUM_SINGLE_DECL(eq4bw, WM8978_EQ4, 8, wm8978_bw);
static const SOC_ENUM_SINGLE_DECL(eq4, WM8978_EQ4, 5, wm8978_eq4);
static const SOC_ENUM_SINGLE_DECL(eq5, WM8978_EQ5, 5, wm8978_eq5);
static const SOC_ENUM_SINGLE_DECL(alc3, WM8978_ALC_CONTROL_3, 8, wm8978_alc3);
static const SOC_ENUM_SINGLE_DECL(alc1, WM8978_ALC_CONTROL_1, 7, wm8978_alc1);
static const DECLARE_TLV_DB_SCALE(digital_tlv, -12750, 50, 1);
static const DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0);
static const DECLARE_TLV_DB_SCALE(inpga_tlv, -1200, 75, 0);
static const DECLARE_TLV_DB_SCALE(spk_tlv, -5700, 100, 0);
static const DECLARE_TLV_DB_SCALE(boost_tlv, -1500, 300, 1);
static const struct snd_kcontrol_new wm8978_snd_controls[] = {
SOC_SINGLE("Digital Loopback Switch",
WM8978_COMPANDING_CONTROL, 0, 1, 0),
SOC_ENUM("ADC Companding", adc_compand),
SOC_ENUM("DAC Companding", dac_compand),
SOC_DOUBLE("DAC Inversion Switch", WM8978_DAC_CONTROL, 0, 1, 1, 0),
SOC_DOUBLE_R_TLV("PCM Volume",
WM8978_LEFT_DAC_DIGITAL_VOLUME, WM8978_RIGHT_DAC_DIGITAL_VOLUME,
0, 255, 0, digital_tlv),
SOC_SINGLE("High Pass Filter Switch", WM8978_ADC_CONTROL, 8, 1, 0),
SOC_SINGLE("High Pass Cut Off", WM8978_ADC_CONTROL, 4, 7, 0),
SOC_DOUBLE("ADC Inversion Switch", WM8978_ADC_CONTROL, 0, 1, 1, 0),
SOC_DOUBLE_R_TLV("ADC Volume",
WM8978_LEFT_ADC_DIGITAL_VOLUME, WM8978_RIGHT_ADC_DIGITAL_VOLUME,
0, 255, 0, digital_tlv),
SOC_ENUM("Equaliser Function", eqmode),
SOC_ENUM("EQ1 Cut Off", eq1),
SOC_SINGLE_TLV("EQ1 Volume", WM8978_EQ1, 0, 24, 1, eq_tlv),
SOC_ENUM("Equaliser EQ2 Bandwith", eq2bw),
SOC_ENUM("EQ2 Cut Off", eq2),
SOC_SINGLE_TLV("EQ2 Volume", WM8978_EQ2, 0, 24, 1, eq_tlv),
SOC_ENUM("Equaliser EQ3 Bandwith", eq3bw),
SOC_ENUM("EQ3 Cut Off", eq3),
SOC_SINGLE_TLV("EQ3 Volume", WM8978_EQ3, 0, 24, 1, eq_tlv),
SOC_ENUM("Equaliser EQ4 Bandwith", eq4bw),
SOC_ENUM("EQ4 Cut Off", eq4),
SOC_SINGLE_TLV("EQ4 Volume", WM8978_EQ4, 0, 24, 1, eq_tlv),
SOC_ENUM("EQ5 Cut Off", eq5),
SOC_SINGLE_TLV("EQ5 Volume", WM8978_EQ5, 0, 24, 1, eq_tlv),
SOC_SINGLE("DAC Playback Limiter Switch",
WM8978_DAC_LIMITER_1, 8, 1, 0),
SOC_SINGLE("DAC Playback Limiter Decay",
WM8978_DAC_LIMITER_1, 4, 15, 0),
SOC_SINGLE("DAC Playback Limiter Attack",
WM8978_DAC_LIMITER_1, 0, 15, 0),
SOC_SINGLE("DAC Playback Limiter Threshold",
WM8978_DAC_LIMITER_2, 4, 7, 0),
SOC_SINGLE("DAC Playback Limiter Boost",
WM8978_DAC_LIMITER_2, 0, 15, 0),
SOC_ENUM("ALC Enable Switch", alc1),
SOC_SINGLE("ALC Capture Min Gain", WM8978_ALC_CONTROL_1, 0, 7, 0),
SOC_SINGLE("ALC Capture Max Gain", WM8978_ALC_CONTROL_1, 3, 7, 0),
SOC_SINGLE("ALC Capture Hold", WM8978_ALC_CONTROL_2, 4, 7, 0),
SOC_SINGLE("ALC Capture Target", WM8978_ALC_CONTROL_2, 0, 15, 0),
SOC_ENUM("ALC Capture Mode", alc3),
SOC_SINGLE("ALC Capture Decay", WM8978_ALC_CONTROL_3, 4, 15, 0),
SOC_SINGLE("ALC Capture Attack", WM8978_ALC_CONTROL_3, 0, 15, 0),
SOC_SINGLE("ALC Capture Noise Gate Switch", WM8978_NOISE_GATE, 3, 1, 0),
SOC_SINGLE("ALC Capture Noise Gate Threshold",
WM8978_NOISE_GATE, 0, 7, 0),
SOC_DOUBLE_R("Capture PGA ZC Switch",
WM8978_LEFT_INP_PGA_CONTROL, WM8978_RIGHT_INP_PGA_CONTROL,
7, 1, 0),
/* OUT1 - Headphones */
SOC_DOUBLE_R("Headphone Playback ZC Switch",
WM8978_LOUT1_HP_CONTROL, WM8978_ROUT1_HP_CONTROL, 7, 1, 0),
SOC_DOUBLE_R_TLV("Headphone Playback Volume",
WM8978_LOUT1_HP_CONTROL, WM8978_ROUT1_HP_CONTROL,
0, 63, 0, spk_tlv),
/* OUT2 - Speakers */
SOC_DOUBLE_R("Speaker Playback ZC Switch",
WM8978_LOUT2_SPK_CONTROL, WM8978_ROUT2_SPK_CONTROL, 7, 1, 0),
SOC_DOUBLE_R_TLV("Speaker Playback Volume",
WM8978_LOUT2_SPK_CONTROL, WM8978_ROUT2_SPK_CONTROL,
0, 63, 0, spk_tlv),
/* OUT3/4 - Line Output */
SOC_DOUBLE_R("Line Playback Switch",
WM8978_OUT3_MIXER_CONTROL, WM8978_OUT4_MIXER_CONTROL, 6, 1, 1),
/* Mixer #3: Boost (Input) mixer */
SOC_DOUBLE_R("PGA Boost (+20dB)",
WM8978_LEFT_ADC_BOOST_CONTROL, WM8978_RIGHT_ADC_BOOST_CONTROL,
8, 1, 0),
SOC_DOUBLE_R_TLV("L2/R2 Boost Volume",
WM8978_LEFT_ADC_BOOST_CONTROL, WM8978_RIGHT_ADC_BOOST_CONTROL,
4, 7, 0, boost_tlv),
SOC_DOUBLE_R_TLV("Aux Boost Volume",
WM8978_LEFT_ADC_BOOST_CONTROL, WM8978_RIGHT_ADC_BOOST_CONTROL,
0, 7, 0, boost_tlv),
/* Input PGA volume */
SOC_DOUBLE_R_TLV("Input PGA Volume",
WM8978_LEFT_INP_PGA_CONTROL, WM8978_RIGHT_INP_PGA_CONTROL,
0, 63, 0, inpga_tlv),
/* Headphone */
SOC_DOUBLE_R("Headphone Switch",
WM8978_LOUT1_HP_CONTROL, WM8978_ROUT1_HP_CONTROL, 6, 1, 1),
/* Speaker */
SOC_DOUBLE_R("Speaker Switch",
WM8978_LOUT2_SPK_CONTROL, WM8978_ROUT2_SPK_CONTROL, 6, 1, 1),
/* DAC / ADC oversampling */
SOC_SINGLE("DAC 128x Oversampling Switch", WM8978_DAC_CONTROL, 8, 1, 0),
SOC_SINGLE("ADC 128x Oversampling Switch", WM8978_ADC_CONTROL, 8, 1, 0),
};
/* Mixer #1: Output (OUT1, OUT2) Mixer: mix AUX, Input mixer output and DAC */
static const struct snd_kcontrol_new wm8978_left_out_mixer[] = {
SOC_DAPM_SINGLE("Line Bypass Switch", WM8978_LEFT_MIXER_CONTROL, 1, 1, 0),
SOC_DAPM_SINGLE("Aux Playback Switch", WM8978_LEFT_MIXER_CONTROL, 5, 1, 0),
SOC_DAPM_SINGLE("PCM Playback Switch", WM8978_LEFT_MIXER_CONTROL, 0, 1, 0),
};
static const struct snd_kcontrol_new wm8978_right_out_mixer[] = {
SOC_DAPM_SINGLE("Line Bypass Switch", WM8978_RIGHT_MIXER_CONTROL, 1, 1, 0),
SOC_DAPM_SINGLE("Aux Playback Switch", WM8978_RIGHT_MIXER_CONTROL, 5, 1, 0),
SOC_DAPM_SINGLE("PCM Playback Switch", WM8978_RIGHT_MIXER_CONTROL, 0, 1, 0),
};
/* OUT3/OUT4 Mixer not implemented */
/* Mixer #2: Input PGA Mute */
static const struct snd_kcontrol_new wm8978_left_input_mixer[] = {
SOC_DAPM_SINGLE("L2 Switch", WM8978_INPUT_CONTROL, 2, 1, 0),
SOC_DAPM_SINGLE("MicN Switch", WM8978_INPUT_CONTROL, 1, 1, 0),
SOC_DAPM_SINGLE("MicP Switch", WM8978_INPUT_CONTROL, 0, 1, 0),
};
static const struct snd_kcontrol_new wm8978_right_input_mixer[] = {
SOC_DAPM_SINGLE("R2 Switch", WM8978_INPUT_CONTROL, 6, 1, 0),
SOC_DAPM_SINGLE("MicN Switch", WM8978_INPUT_CONTROL, 5, 1, 0),
SOC_DAPM_SINGLE("MicP Switch", WM8978_INPUT_CONTROL, 4, 1, 0),
};
static const struct snd_soc_dapm_widget wm8978_dapm_widgets[] = {
SND_SOC_DAPM_DAC("Left DAC", "Left HiFi Playback",
WM8978_POWER_MANAGEMENT_3, 0, 0),
SND_SOC_DAPM_DAC("Right DAC", "Right HiFi Playback",
WM8978_POWER_MANAGEMENT_3, 1, 0),
SND_SOC_DAPM_ADC("Left ADC", "Left HiFi Capture",
WM8978_POWER_MANAGEMENT_2, 0, 0),
SND_SOC_DAPM_ADC("Right ADC", "Right HiFi Capture",
WM8978_POWER_MANAGEMENT_2, 1, 0),
/* Mixer #1: OUT1,2 */
SOC_MIXER_ARRAY("Left Output Mixer", WM8978_POWER_MANAGEMENT_3,
2, 0, wm8978_left_out_mixer),
SOC_MIXER_ARRAY("Right Output Mixer", WM8978_POWER_MANAGEMENT_3,
3, 0, wm8978_right_out_mixer),
SOC_MIXER_ARRAY("Left Input Mixer", WM8978_POWER_MANAGEMENT_2,
2, 0, wm8978_left_input_mixer),
SOC_MIXER_ARRAY("Right Input Mixer", WM8978_POWER_MANAGEMENT_2,
3, 0, wm8978_right_input_mixer),
SND_SOC_DAPM_PGA("Left Boost Mixer", WM8978_POWER_MANAGEMENT_2,
4, 0, NULL, 0),
SND_SOC_DAPM_PGA("Right Boost Mixer", WM8978_POWER_MANAGEMENT_2,
5, 0, NULL, 0),
SND_SOC_DAPM_PGA("Left Capture PGA", WM8978_LEFT_INP_PGA_CONTROL,
6, 1, NULL, 0),
SND_SOC_DAPM_PGA("Right Capture PGA", WM8978_RIGHT_INP_PGA_CONTROL,
6, 1, NULL, 0),
SND_SOC_DAPM_PGA("Left Headphone Out", WM8978_POWER_MANAGEMENT_2,
7, 0, NULL, 0),
SND_SOC_DAPM_PGA("Right Headphone Out", WM8978_POWER_MANAGEMENT_2,
8, 0, NULL, 0),
SND_SOC_DAPM_PGA("Left Speaker Out", WM8978_POWER_MANAGEMENT_3,
6, 0, NULL, 0),
SND_SOC_DAPM_PGA("Right Speaker Out", WM8978_POWER_MANAGEMENT_3,
5, 0, NULL, 0),
SND_SOC_DAPM_MIXER("OUT4 VMID", WM8978_POWER_MANAGEMENT_3,
8, 0, NULL, 0),
SND_SOC_DAPM_MICBIAS("Mic Bias", WM8978_POWER_MANAGEMENT_1, 4, 0),
SND_SOC_DAPM_INPUT("LMICN"),
SND_SOC_DAPM_INPUT("LMICP"),
SND_SOC_DAPM_INPUT("RMICN"),
SND_SOC_DAPM_INPUT("RMICP"),
SND_SOC_DAPM_INPUT("LAUX"),
SND_SOC_DAPM_INPUT("RAUX"),
SND_SOC_DAPM_INPUT("L2"),
SND_SOC_DAPM_INPUT("R2"),
SND_SOC_DAPM_OUTPUT("LHP"),
SND_SOC_DAPM_OUTPUT("RHP"),
SND_SOC_DAPM_OUTPUT("LSPK"),
SND_SOC_DAPM_OUTPUT("RSPK"),
};
static const struct snd_soc_dapm_route audio_map[] = {
/* Output mixer */
{"Right Output Mixer", "PCM Playback Switch", "Right DAC"},
{"Right Output Mixer", "Aux Playback Switch", "RAUX"},
{"Right Output Mixer", "Line Bypass Switch", "Right Boost Mixer"},
{"Left Output Mixer", "PCM Playback Switch", "Left DAC"},
{"Left Output Mixer", "Aux Playback Switch", "LAUX"},
{"Left Output Mixer", "Line Bypass Switch", "Left Boost Mixer"},
/* Outputs */
{"Right Headphone Out", NULL, "Right Output Mixer"},
{"RHP", NULL, "Right Headphone Out"},
{"Left Headphone Out", NULL, "Left Output Mixer"},
{"LHP", NULL, "Left Headphone Out"},
{"Right Speaker Out", NULL, "Right Output Mixer"},
{"RSPK", NULL, "Right Speaker Out"},
{"Left Speaker Out", NULL, "Left Output Mixer"},
{"LSPK", NULL, "Left Speaker Out"},
/* Boost Mixer */
{"Right ADC", NULL, "Right Boost Mixer"},
{"Right Boost Mixer", NULL, "RAUX"},
{"Right Boost Mixer", NULL, "Right Capture PGA"},
{"Right Boost Mixer", NULL, "R2"},
{"Left ADC", NULL, "Left Boost Mixer"},
{"Left Boost Mixer", NULL, "LAUX"},
{"Left Boost Mixer", NULL, "Left Capture PGA"},
{"Left Boost Mixer", NULL, "L2"},
/* Input PGA */
{"Right Capture PGA", NULL, "Right Input Mixer"},
{"Left Capture PGA", NULL, "Left Input Mixer"},
{"Right Input Mixer", "R2 Switch", "R2"},
{"Right Input Mixer", "MicN Switch", "RMICN"},
{"Right Input Mixer", "MicP Switch", "RMICP"},
{"Left Input Mixer", "L2 Switch", "L2"},
{"Left Input Mixer", "MicN Switch", "LMICN"},
{"Left Input Mixer", "MicP Switch", "LMICP"},
};
static int wm8978_add_widgets(struct snd_soc_codec *codec)
{
snd_soc_dapm_new_controls(codec, wm8978_dapm_widgets,
ARRAY_SIZE(wm8978_dapm_widgets));
/* set up the WM8978 audio map */
snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map));
return 0;
}
/* PLL divisors */
struct wm8978_pll_div {
u32 k;
u8 n;
u8 div2;
};
#define FIXED_PLL_SIZE (1 << 24)
static void pll_factors(struct wm8978_pll_div *pll_div, unsigned int target,
unsigned int source)
{
u64 k_part;
unsigned int k, n_div, n_mod;
n_div = target / source;
if (n_div < 6) {
source >>= 1;
pll_div->div2 = 1;
n_div = target / source;
} else {
pll_div->div2 = 0;
}
if (n_div < 6 || n_div > 12)
dev_warn(wm8978_codec->dev,
"WM8978 N value exceeds recommended range! N = %u\n",
n_div);
pll_div->n = n_div;
n_mod = target - source * n_div;
k_part = FIXED_PLL_SIZE * (long long)n_mod + source / 2;
do_div(k_part, source);
k = k_part & 0xFFFFFFFF;
pll_div->k = k;
}
/*
* Calculate internal frequencies and dividers, according to Figure 40
* "PLL and Clock Select Circuit" in WM8978 datasheet Rev. 2.6
*/
static int wm8978_configure_pll(struct snd_soc_codec *codec)
{
struct wm8978_priv *wm8978 = codec->private_data;
struct wm8978_pll_div pll_div;
unsigned int f_opclk = wm8978->f_opclk, f_mclk = wm8978->f_mclk,
f_256fs = wm8978->f_256fs;
unsigned int f2, opclk_div;
if (!f_mclk)
return -EINVAL;
if (f_opclk) {
/*
* The user needs OPCLK. Choose OPCLKDIV to put
* 6 <= R = f2 / f1 < 13, 1 <= OPCLKDIV <= 4.
* f_opclk = f_mclk * prescale * R / 4 / OPCLKDIV, where
* prescale = 1, or prescale = 2. Prescale is calculated inside
* pll_factors(). We have to select f_PLLOUT, such that
* f_mclk * 3 / 4 <= f_PLLOUT < f_mclk * 13 / 4. Must be
* f_mclk * 3 / 16 <= f_opclk < f_mclk * 13 / 4.
*/
if (16 * f_opclk < 3 * f_mclk || 4 * f_opclk >= 13 * f_mclk)
return -EINVAL;
if (4 * f_opclk < 3 * f_mclk)
/* Have to use OPCLKDIV */
opclk_div = (3 * f_mclk / 4 + f_opclk - 1) / f_opclk;
else
opclk_div = 1;
dev_dbg(codec->dev, "%s: OPCLKDIV=%d\n", __func__, opclk_div);
snd_soc_update_bits(codec, WM8978_GPIO_CONTROL, 0x30,
(opclk_div - 1) << 4);
wm8978->f_pllout = f_opclk * opclk_div;
} else if (f_256fs) {
/*
* Not using OPCLK, choose R:
* 6 <= R = f2 / f1 < 13, to put 1 <= MCLKDIV <= 12.
* f_256fs = f_mclk * prescale * R / 4 / MCLKDIV, where
* prescale = 1, or prescale = 2. Prescale is calculated inside
* pll_factors(). We have to select f_PLLOUT, such that
* f_mclk * 3 / 4 <= f_PLLOUT < f_mclk * 13 / 4. Must be
* f_mclk * 3 / 48 <= f_256fs < f_mclk * 13 / 4. This means MCLK
* must be 3.781MHz <= f_MCLK <= 32.768MHz
*/
if (48 * f_256fs < 3 * f_mclk || 4 * f_256fs >= 13 * f_mclk)
return -EINVAL;
/*
* MCLKDIV will be selected in .hw_params(), just choose a
* suitable f_PLLOUT
*/
if (4 * f_256fs < 3 * f_mclk)
/* Will have to use MCLKDIV */
wm8978->f_pllout = wm8978->f_mclk * 3 / 4;
else
wm8978->f_pllout = f_256fs;
/* GPIO1 into default mode as input - before configuring PLL */
snd_soc_update_bits(codec, WM8978_GPIO_CONTROL, 7, 0);
} else {
return -EINVAL;
}
f2 = wm8978->f_pllout * 4;
dev_dbg(codec->dev, "%s: f_MCLK=%uHz, f_PLLOUT=%uHz\n", __func__,
wm8978->f_mclk, wm8978->f_pllout);
pll_factors(&pll_div, f2, wm8978->f_mclk);
dev_dbg(codec->dev, "%s: calculated PLL N=0x%x, K=0x%x, div2=%d\n",
__func__, pll_div.n, pll_div.k, pll_div.div2);
/* Turn PLL off for configuration... */
snd_soc_update_bits(codec, WM8978_POWER_MANAGEMENT_1, 0x20, 0);
snd_soc_write(codec, WM8978_PLL_N, (pll_div.div2 << 4) | pll_div.n);
snd_soc_write(codec, WM8978_PLL_K1, pll_div.k >> 18);
snd_soc_write(codec, WM8978_PLL_K2, (pll_div.k >> 9) & 0x1ff);
snd_soc_write(codec, WM8978_PLL_K3, pll_div.k & 0x1ff);
/* ...and on again */
snd_soc_update_bits(codec, WM8978_POWER_MANAGEMENT_1, 0x20, 0x20);
if (f_opclk)
/* Output PLL (OPCLK) to GPIO1 */
snd_soc_update_bits(codec, WM8978_GPIO_CONTROL, 7, 4);
return 0;
}
/*
* Configure WM8978 clock dividers.
*/
static int wm8978_set_dai_clkdiv(struct snd_soc_dai *codec_dai,
int div_id, int div)
{
struct snd_soc_codec *codec = codec_dai->codec;
struct wm8978_priv *wm8978 = codec->private_data;
int ret = 0;
switch (div_id) {
case WM8978_OPCLKRATE:
wm8978->f_opclk = div;
if (wm8978->f_mclk)
ret = wm8978_configure_pll(codec);
break;
case WM8978_BCLKDIV:
if (div & ~0x1c)
return -EINVAL;
snd_soc_update_bits(codec, WM8978_CLOCKING, 0x1c, div);
break;
default:
return -EINVAL;
}
dev_dbg(codec->dev, "%s: ID %d, value %u\n", __func__, div_id, div);
return ret;
}
/*
* @freq: when .set_pll() us not used, freq is codec MCLK input frequency
*/
static int wm8978_set_dai_sysclk(struct snd_soc_dai *codec_dai, int clk_id,
unsigned int freq, int dir)
{
struct snd_soc_codec *codec = codec_dai->codec;
struct wm8978_priv *wm8978 = codec->private_data;
int ret = 0;
dev_dbg(codec->dev, "%s: ID %d, freq %u\n", __func__, clk_id, freq);
if (freq) {
wm8978->f_mclk = freq;
/* Even if MCLK is used for system clock, might have to drive OPCLK */
if (wm8978->f_opclk)
ret = wm8978_configure_pll(codec);
/* Our sysclk is fixed to 256 * fs, will configure in .hw_params() */
if (!ret)
wm8978->sysclk = clk_id;
}
if (wm8978->sysclk == WM8978_PLL && (!freq || clk_id == WM8978_MCLK)) {
/* Clock CODEC directly from MCLK */
snd_soc_update_bits(codec, WM8978_CLOCKING, 0x100, 0);
/* GPIO1 into default mode as input - before configuring PLL */
snd_soc_update_bits(codec, WM8978_GPIO_CONTROL, 7, 0);
/* Turn off PLL */
snd_soc_update_bits(codec, WM8978_POWER_MANAGEMENT_1, 0x20, 0);
wm8978->sysclk = WM8978_MCLK;
wm8978->f_pllout = 0;
wm8978->f_opclk = 0;
}
return ret;
}
/*
* Set ADC and Voice DAC format.
*/
static int wm8978_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
{
struct snd_soc_codec *codec = codec_dai->codec;
/*
* BCLK polarity mask = 0x100, LRC clock polarity mask = 0x80,
* Data Format mask = 0x18: all will be calculated anew
*/
u16 iface = snd_soc_read(codec, WM8978_AUDIO_INTERFACE) & ~0x198;
u16 clk = snd_soc_read(codec, WM8978_CLOCKING);
dev_dbg(codec->dev, "%s\n", __func__);
/* set master/slave audio interface */
switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
case SND_SOC_DAIFMT_CBM_CFM:
clk |= 1;
break;
case SND_SOC_DAIFMT_CBS_CFS:
clk &= ~1;
break;
default:
return -EINVAL;
}
/* interface format */
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
case SND_SOC_DAIFMT_I2S:
iface |= 0x10;
break;
case SND_SOC_DAIFMT_RIGHT_J:
break;
case SND_SOC_DAIFMT_LEFT_J:
iface |= 0x8;
break;
case SND_SOC_DAIFMT_DSP_A:
iface |= 0x18;
break;
default:
return -EINVAL;
}
/* clock inversion */
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
case SND_SOC_DAIFMT_NB_NF:
break;
case SND_SOC_DAIFMT_IB_IF:
iface |= 0x180;
break;
case SND_SOC_DAIFMT_IB_NF:
iface |= 0x100;
break;
case SND_SOC_DAIFMT_NB_IF:
iface |= 0x80;
break;
default:
return -EINVAL;
}
snd_soc_write(codec, WM8978_AUDIO_INTERFACE, iface);
snd_soc_write(codec, WM8978_CLOCKING, clk);
return 0;
}
/* MCLK dividers */
static const int mclk_numerator[] = {1, 3, 2, 3, 4, 6, 8, 12};
static const int mclk_denominator[] = {1, 2, 1, 1, 1, 1, 1, 1};
/*
* Set PCM DAI bit size and sample rate.
*/
static int wm8978_hw_params(struct snd_pcm_substream *substream,
struct snd_pcm_hw_params *params,
struct snd_soc_dai *dai)
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct snd_soc_device *socdev = rtd->socdev;
struct snd_soc_codec *codec = socdev->card->codec;
struct wm8978_priv *wm8978 = codec->private_data;
/* Word length mask = 0x60 */
u16 iface_ctl = snd_soc_read(codec, WM8978_AUDIO_INTERFACE) & ~0x60;
/* Sampling rate mask = 0xe (for filters) */
u16 add_ctl = snd_soc_read(codec, WM8978_ADDITIONAL_CONTROL) & ~0xe;
u16 clking = snd_soc_read(codec, WM8978_CLOCKING);
enum wm8978_sysclk_src current_clk_id = clking & 0x100 ?
WM8978_PLL : WM8978_MCLK;
unsigned int f_sel, diff, diff_best = INT_MAX;
int i, best = 0;
if (!wm8978->f_mclk)
return -EINVAL;
/* bit size */
switch (params_format(params)) {
case SNDRV_PCM_FORMAT_S16_LE:
break;
case SNDRV_PCM_FORMAT_S20_3LE:
iface_ctl |= 0x20;
break;
case SNDRV_PCM_FORMAT_S24_LE:
iface_ctl |= 0x40;
break;
case SNDRV_PCM_FORMAT_S32_LE:
iface_ctl |= 0x60;
break;
}
/* filter coefficient */
switch (params_rate(params)) {
case 8000:
add_ctl |= 0x5 << 1;
break;
case 11025:
add_ctl |= 0x4 << 1;
break;
case 16000:
add_ctl |= 0x3 << 1;
break;
case 22050:
add_ctl |= 0x2 << 1;
break;
case 32000:
add_ctl |= 0x1 << 1;
break;
case 44100:
case 48000:
break;
}
/* Sampling rate is known now, can configure the MCLK divider */
wm8978->f_256fs = params_rate(params) * 256;
if (wm8978->sysclk == WM8978_MCLK) {
f_sel = wm8978->f_mclk;
} else {
if (!wm8978->f_pllout) {
int ret = wm8978_configure_pll(codec);
if (ret < 0)
return ret;
}
f_sel = wm8978->f_pllout;
}
/*
* In some cases it is possible to reconfigure PLL to a higher frequency
* by raising OPCLKDIV, but normally OPCLK is configured to 256 * fs or
* 512 * fs, so, we should be fine.
*/
if (f_sel < wm8978->f_256fs || f_sel > 12 * wm8978->f_256fs)
return -EINVAL;
for (i = 0; i < ARRAY_SIZE(mclk_numerator); i++) {
diff = abs(wm8978->f_256fs * 3 -
f_sel * 3 * mclk_denominator[i] / mclk_numerator[i]);
if (diff < diff_best) {
diff_best = diff;
best = i;
}
if (!diff)
break;
}
if (diff)
dev_warn(codec->dev, "Imprecise clock: %u%s\n",
f_sel * mclk_denominator[best] / mclk_numerator[best],
wm8978->sysclk == WM8978_MCLK ?
", consider using PLL" : "");
dev_dbg(codec->dev, "%s: fmt %d, rate %u, MCLK divisor #%d\n", __func__,
params_format(params), params_rate(params), best);
/* MCLK divisor mask = 0xe0 */
snd_soc_update_bits(codec, WM8978_CLOCKING, 0xe0, best << 5);
snd_soc_write(codec, WM8978_AUDIO_INTERFACE, iface_ctl);
snd_soc_write(codec, WM8978_ADDITIONAL_CONTROL, add_ctl);
if (wm8978->sysclk != current_clk_id) {
if (wm8978->sysclk == WM8978_PLL)
/* Run CODEC from PLL instead of MCLK */
snd_soc_update_bits(codec, WM8978_CLOCKING,
0x100, 0x100);
else
/* Clock CODEC directly from MCLK */
snd_soc_update_bits(codec, WM8978_CLOCKING, 0x100, 0);
}
return 0;
}
static int wm8978_mute(struct snd_soc_dai *dai, int mute)
{
struct snd_soc_codec *codec = dai->codec;
dev_dbg(codec->dev, "%s: %d\n", __func__, mute);
if (mute)
snd_soc_update_bits(codec, WM8978_DAC_CONTROL, 0x40, 0x40);
else
snd_soc_update_bits(codec, WM8978_DAC_CONTROL, 0x40, 0);
return 0;
}
static int wm8978_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level)
{
u16 power1 = snd_soc_read(codec, WM8978_POWER_MANAGEMENT_1) & ~3;
switch (level) {
case SND_SOC_BIAS_ON:
case SND_SOC_BIAS_PREPARE:
power1 |= 1; /* VMID 75k */
snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1, power1);
break;
case SND_SOC_BIAS_STANDBY:
/* bit 3: enable bias, bit 2: enable I/O tie off buffer */
power1 |= 0xc;
if (codec->bias_level == SND_SOC_BIAS_OFF) {
/* Initial cap charge at VMID 5k */
snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1,
power1 | 0x3);
mdelay(100);
}
power1 |= 0x2; /* VMID 500k */
snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1, power1);
break;
case SND_SOC_BIAS_OFF:
/* Preserve PLL - OPCLK may be used by someone */
snd_soc_update_bits(codec, WM8978_POWER_MANAGEMENT_1, ~0x20, 0);
snd_soc_write(codec, WM8978_POWER_MANAGEMENT_2, 0);
snd_soc_write(codec, WM8978_POWER_MANAGEMENT_3, 0);
break;
}
dev_dbg(codec->dev, "%s: %d, %x\n", __func__, level, power1);
codec->bias_level = level;
return 0;
}
#define WM8978_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE | \
SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
static struct snd_soc_dai_ops wm8978_dai_ops = {
.hw_params = wm8978_hw_params,
.digital_mute = wm8978_mute,
.set_fmt = wm8978_set_dai_fmt,
.set_clkdiv = wm8978_set_dai_clkdiv,
.set_sysclk = wm8978_set_dai_sysclk,
};
/* Also supports 12kHz */
struct snd_soc_dai wm8978_dai = {
.name = "WM8978 HiFi",
.id = 1,
.playback = {
.stream_name = "Playback",
.channels_min = 1,
.channels_max = 2,
.rates = SNDRV_PCM_RATE_8000_48000,
.formats = WM8978_FORMATS,
},
.capture = {
.stream_name = "Capture",
.channels_min = 1,
.channels_max = 2,
.rates = SNDRV_PCM_RATE_8000_48000,
.formats = WM8978_FORMATS,
},
.ops = &wm8978_dai_ops,
};
EXPORT_SYMBOL_GPL(wm8978_dai);
static int wm8978_suspend(struct platform_device *pdev, pm_message_t state)
{
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
struct snd_soc_codec *codec = socdev->card->codec;
wm8978_set_bias_level(codec, SND_SOC_BIAS_OFF);
/* Also switch PLL off */
snd_soc_write(codec, WM8978_POWER_MANAGEMENT_1, 0);
return 0;
}
static int wm8978_resume(struct platform_device *pdev)
{
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
struct snd_soc_codec *codec = socdev->card->codec;
struct wm8978_priv *wm8978 = codec->private_data;
int i;
u16 *cache = codec->reg_cache;
/* Sync reg_cache with the hardware */
for (i = 0; i < ARRAY_SIZE(wm8978_reg); i++) {
if (i == WM8978_RESET)
continue;
if (cache[i] != wm8978_reg[i])
snd_soc_write(codec, i, cache[i]);
}
wm8978_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
if (wm8978->f_pllout)
/* Switch PLL on */
snd_soc_update_bits(codec, WM8978_POWER_MANAGEMENT_1, 0x20, 0x20);
return 0;
}
static int wm8978_probe(struct platform_device *pdev)
{
struct snd_soc_device *socdev = platform_get_drvdata(pdev);
struct snd_soc_codec *codec;
int ret = 0;
if (wm8978_codec == NULL) {
dev_err(&pdev->dev, "Codec device not registered\n");
return -ENODEV;
}
socdev->card->codec = wm8978_codec;
codec = wm8978_codec;