@jbrowse/plugin-sequence 2.6.1 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/BgzipFastaAdapter/BgzipFastaAdapter.js +0 -1
  2. package/dist/BgzipFastaAdapter/configSchema.js +0 -1
  3. package/dist/BgzipFastaAdapter/index.js +0 -1
  4. package/dist/ChromSizesAdapter/ChromSizesAdapter.js +0 -1
  5. package/dist/ChromSizesAdapter/configSchema.js +0 -1
  6. package/dist/ChromSizesAdapter/index.js +0 -1
  7. package/dist/DivSequenceRenderer/components/DivSequenceRendering.js +0 -1
  8. package/dist/DivSequenceRenderer/configSchema.js +0 -1
  9. package/dist/DivSequenceRenderer/index.js +0 -1
  10. package/dist/IndexedFastaAdapter/IndexedFastaAdapter.js +0 -1
  11. package/dist/IndexedFastaAdapter/configSchema.js +0 -1
  12. package/dist/IndexedFastaAdapter/index.js +0 -1
  13. package/dist/LinearReferenceSequenceDisplay/configSchema.js +0 -1
  14. package/dist/LinearReferenceSequenceDisplay/index.js +0 -1
  15. package/dist/LinearReferenceSequenceDisplay/model.js +0 -1
  16. package/dist/ReferenceSequenceTrack/configSchema.js +0 -1
  17. package/dist/ReferenceSequenceTrack/index.js +0 -1
  18. package/dist/SequenceSearchAdapter/SequenceSearchAdapter.js +0 -1
  19. package/dist/SequenceSearchAdapter/configSchema.js +0 -1
  20. package/dist/SequenceSearchAdapter/index.js +0 -1
  21. package/dist/TwoBitAdapter/TwoBitAdapter.js +0 -1
  22. package/dist/TwoBitAdapter/configSchema.js +0 -1
  23. package/dist/TwoBitAdapter/index.js +0 -1
  24. package/dist/createExtensionPoints.js +0 -1
  25. package/dist/index.js +0 -1
  26. package/esm/BgzipFastaAdapter/BgzipFastaAdapter.js +0 -1
  27. package/esm/BgzipFastaAdapter/configSchema.js +0 -1
  28. package/esm/BgzipFastaAdapter/index.js +0 -1
  29. package/esm/ChromSizesAdapter/ChromSizesAdapter.js +0 -1
  30. package/esm/ChromSizesAdapter/configSchema.js +0 -1
  31. package/esm/ChromSizesAdapter/index.js +0 -1
  32. package/esm/DivSequenceRenderer/components/DivSequenceRendering.js +0 -1
  33. package/esm/DivSequenceRenderer/configSchema.js +0 -1
  34. package/esm/DivSequenceRenderer/index.js +0 -1
  35. package/esm/IndexedFastaAdapter/IndexedFastaAdapter.js +0 -1
  36. package/esm/IndexedFastaAdapter/configSchema.js +0 -1
  37. package/esm/IndexedFastaAdapter/index.js +0 -1
  38. package/esm/LinearReferenceSequenceDisplay/configSchema.js +0 -1
  39. package/esm/LinearReferenceSequenceDisplay/index.js +0 -1
  40. package/esm/LinearReferenceSequenceDisplay/model.js +0 -1
  41. package/esm/ReferenceSequenceTrack/configSchema.js +0 -1
  42. package/esm/ReferenceSequenceTrack/index.js +0 -1
  43. package/esm/SequenceSearchAdapter/SequenceSearchAdapter.js +0 -1
  44. package/esm/SequenceSearchAdapter/configSchema.js +0 -1
  45. package/esm/SequenceSearchAdapter/index.js +0 -1
  46. package/esm/TwoBitAdapter/TwoBitAdapter.js +0 -1
  47. package/esm/TwoBitAdapter/configSchema.js +0 -1
  48. package/esm/TwoBitAdapter/index.js +0 -1
  49. package/esm/createExtensionPoints.js +0 -1
  50. package/esm/index.js +0 -1
  51. package/package.json +3 -4
  52. package/dist/BgzipFastaAdapter/BgzipFastaAdapter.js.map +0 -1
  53. package/dist/BgzipFastaAdapter/configSchema.js.map +0 -1
  54. package/dist/BgzipFastaAdapter/index.js.map +0 -1
  55. package/dist/ChromSizesAdapter/ChromSizesAdapter.js.map +0 -1
  56. package/dist/ChromSizesAdapter/configSchema.js.map +0 -1
  57. package/dist/ChromSizesAdapter/index.js.map +0 -1
  58. package/dist/DivSequenceRenderer/components/DivSequenceRendering.js.map +0 -1
  59. package/dist/DivSequenceRenderer/configSchema.js.map +0 -1
  60. package/dist/DivSequenceRenderer/index.js.map +0 -1
  61. package/dist/IndexedFastaAdapter/IndexedFastaAdapter.js.map +0 -1
  62. package/dist/IndexedFastaAdapter/configSchema.js.map +0 -1
  63. package/dist/IndexedFastaAdapter/index.js.map +0 -1
  64. package/dist/LinearReferenceSequenceDisplay/configSchema.js.map +0 -1
  65. package/dist/LinearReferenceSequenceDisplay/index.js.map +0 -1
  66. package/dist/LinearReferenceSequenceDisplay/model.js.map +0 -1
  67. package/dist/ReferenceSequenceTrack/configSchema.js.map +0 -1
  68. package/dist/ReferenceSequenceTrack/index.js.map +0 -1
  69. package/dist/SequenceSearchAdapter/SequenceSearchAdapter.js.map +0 -1
  70. package/dist/SequenceSearchAdapter/configSchema.js.map +0 -1
  71. package/dist/SequenceSearchAdapter/index.js.map +0 -1
  72. package/dist/TwoBitAdapter/TwoBitAdapter.js.map +0 -1
  73. package/dist/TwoBitAdapter/configSchema.js.map +0 -1
  74. package/dist/TwoBitAdapter/index.js.map +0 -1
  75. package/dist/createExtensionPoints.js.map +0 -1
  76. package/dist/index.js.map +0 -1
  77. package/esm/BgzipFastaAdapter/BgzipFastaAdapter.js.map +0 -1
  78. package/esm/BgzipFastaAdapter/configSchema.js.map +0 -1
  79. package/esm/BgzipFastaAdapter/index.js.map +0 -1
  80. package/esm/ChromSizesAdapter/ChromSizesAdapter.js.map +0 -1
  81. package/esm/ChromSizesAdapter/configSchema.js.map +0 -1
  82. package/esm/ChromSizesAdapter/index.js.map +0 -1
  83. package/esm/DivSequenceRenderer/components/DivSequenceRendering.js.map +0 -1
  84. package/esm/DivSequenceRenderer/configSchema.js.map +0 -1
  85. package/esm/DivSequenceRenderer/index.js.map +0 -1
  86. package/esm/IndexedFastaAdapter/IndexedFastaAdapter.js.map +0 -1
  87. package/esm/IndexedFastaAdapter/configSchema.js.map +0 -1
  88. package/esm/IndexedFastaAdapter/index.js.map +0 -1
  89. package/esm/LinearReferenceSequenceDisplay/configSchema.js.map +0 -1
  90. package/esm/LinearReferenceSequenceDisplay/index.js.map +0 -1
  91. package/esm/LinearReferenceSequenceDisplay/model.js.map +0 -1
  92. package/esm/ReferenceSequenceTrack/configSchema.js.map +0 -1
  93. package/esm/ReferenceSequenceTrack/index.js.map +0 -1
  94. package/esm/SequenceSearchAdapter/SequenceSearchAdapter.js.map +0 -1
  95. package/esm/SequenceSearchAdapter/configSchema.js.map +0 -1
  96. package/esm/SequenceSearchAdapter/index.js.map +0 -1
  97. package/esm/TwoBitAdapter/TwoBitAdapter.js.map +0 -1
  98. package/esm/TwoBitAdapter/configSchema.js.map +0 -1
  99. package/esm/TwoBitAdapter/index.js.map +0 -1
  100. package/esm/createExtensionPoints.js.map +0 -1
  101. package/esm/index.js.map +0 -1
  102. package/src/BgzipFastaAdapter/BgzipFastaAdapter.test.ts +0 -40
  103. package/src/BgzipFastaAdapter/BgzipFastaAdapter.ts +0 -19
  104. package/src/BgzipFastaAdapter/__snapshots__/BgzipFastaAdapter.test.ts.snap +0 -15
  105. package/src/BgzipFastaAdapter/configSchema.ts +0 -51
  106. package/src/BgzipFastaAdapter/index.ts +0 -20
  107. package/src/ChromSizesAdapter/ChromSizesAdapter.test.ts +0 -27
  108. package/src/ChromSizesAdapter/ChromSizesAdapter.ts +0 -51
  109. package/src/ChromSizesAdapter/configSchema.ts +0 -25
  110. package/src/ChromSizesAdapter/index.ts +0 -20
  111. package/src/ChromSizesAdapter/test_data/volvox.chrom.sizes +0 -2
  112. package/src/DivSequenceRenderer/components/DivSequenceRendering.test.tsx +0 -161
  113. package/src/DivSequenceRenderer/components/DivSequenceRendering.tsx +0 -308
  114. package/src/DivSequenceRenderer/components/__snapshots__/DivSequenceRendering.test.tsx.snap +0 -1426
  115. package/src/DivSequenceRenderer/configSchema.ts +0 -23
  116. package/src/DivSequenceRenderer/index.ts +0 -31
  117. package/src/IndexedFastaAdapter/IndexedFastaAdapter.test.ts +0 -53
  118. package/src/IndexedFastaAdapter/IndexedFastaAdapter.ts +0 -113
  119. package/src/IndexedFastaAdapter/__snapshots__/IndexedFastaAdapter.test.ts.snap +0 -15
  120. package/src/IndexedFastaAdapter/configSchema.ts +0 -39
  121. package/src/IndexedFastaAdapter/index.ts +0 -20
  122. package/src/LinearReferenceSequenceDisplay/configSchema.ts +0 -18
  123. package/src/LinearReferenceSequenceDisplay/index.ts +0 -21
  124. package/src/LinearReferenceSequenceDisplay/model.ts +0 -148
  125. package/src/ReferenceSequenceTrack/configSchema.ts +0 -117
  126. package/src/ReferenceSequenceTrack/index.ts +0 -22
  127. package/src/SequenceSearchAdapter/SequenceSearchAdapter.ts +0 -104
  128. package/src/SequenceSearchAdapter/configSchema.ts +0 -51
  129. package/src/SequenceSearchAdapter/index.ts +0 -20
  130. package/src/TwoBitAdapter/TwoBitAdapter.test.ts +0 -55
  131. package/src/TwoBitAdapter/TwoBitAdapter.ts +0 -106
  132. package/src/TwoBitAdapter/__snapshots__/TwoBitAdapter.test.ts.snap +0 -30
  133. package/src/TwoBitAdapter/configSchema.ts +0 -34
  134. package/src/TwoBitAdapter/index.ts +0 -19
  135. package/src/__snapshots__/index.test.ts.snap +0 -5
  136. package/src/createExtensionPoints.ts +0 -122
  137. package/src/index.test.ts +0 -20
  138. package/src/index.ts +0 -28
@@ -1,104 +0,0 @@
1
- import {
2
- BaseFeatureDataAdapter,
3
- BaseOptions,
4
- } from '@jbrowse/core/data_adapters/BaseAdapter'
5
- import { ObservableCreate } from '@jbrowse/core/util/rxjs'
6
- import {
7
- SimpleFeature,
8
- Feature,
9
- Region,
10
- revcom,
11
- doesIntersect2,
12
- } from '@jbrowse/core/util'
13
- import { toArray } from 'rxjs/operators'
14
- import { firstValueFrom } from 'rxjs'
15
-
16
- export default class extends BaseFeatureDataAdapter {
17
- public async configure() {
18
- const adapter = await this.getSubAdapter?.(this.getConf('sequenceAdapter'))
19
- if (!adapter) {
20
- throw new Error('Error getting subadapter')
21
- }
22
- return adapter.dataAdapter as BaseFeatureDataAdapter
23
- }
24
-
25
- public async getRefNames() {
26
- const adapter = await this.configure()
27
- return adapter.getRefNames()
28
- }
29
-
30
- public getFeatures(query: Region, opts: BaseOptions) {
31
- return ObservableCreate<Feature>(async observer => {
32
- const sequenceAdapter = await this.configure()
33
- const hw = 1000
34
- let { start: queryStart, end: queryEnd } = query
35
- queryStart = Math.max(0, queryStart - hw)
36
- queryEnd += hw
37
-
38
- if (queryEnd < 0 || queryStart > queryEnd) {
39
- observer.complete()
40
- return
41
- }
42
-
43
- const ret = sequenceAdapter.getFeatures(
44
- {
45
- ...query,
46
- start: queryStart,
47
- end: queryEnd,
48
- },
49
- opts,
50
- )
51
- const feats = await firstValueFrom(ret.pipe(toArray()))
52
- const residues: string = feats[0]?.get('seq') || ''
53
- const search = this.getConf('search') as string
54
- const searchForward = this.getConf('searchForward')
55
- const searchReverse = this.getConf('searchReverse')
56
- const caseInsensitive = this.getConf('caseInsensitive')
57
- const re = new RegExp(search, 'g' + (caseInsensitive ? 'i' : ''))
58
-
59
- if (search) {
60
- if (searchForward) {
61
- const matches = residues.matchAll(re)
62
- for (const match of matches) {
63
- const s = queryStart + (match.index || 0)
64
-
65
- if (doesIntersect2(s, s + search.length, query.start, query.end)) {
66
- observer.next(
67
- new SimpleFeature({
68
- uniqueId: `${this.id}-match-${s}-p`,
69
- refName: query.refName,
70
- start: s,
71
- end: s + match[0].length,
72
- name: match[0],
73
- strand: 1,
74
- }),
75
- )
76
- }
77
- }
78
- }
79
- if (searchReverse) {
80
- const matches = revcom(residues).matchAll(re)
81
- for (const match of matches) {
82
- const s = queryEnd - (match.index || 0)
83
- if (doesIntersect2(s, s + search.length, query.start, query.end)) {
84
- observer.next(
85
- new SimpleFeature({
86
- uniqueId: `${this.id}-match-${s}-n`,
87
- refName: query.refName,
88
- start: s - match[0].length,
89
- name: match[0],
90
- end: s,
91
- strand: -1,
92
- }),
93
- )
94
- }
95
- }
96
- }
97
- }
98
-
99
- observer.complete()
100
- })
101
- }
102
-
103
- public freeResources() {}
104
- }
@@ -1,51 +0,0 @@
1
- import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
-
3
- /**
4
- * #config SequenceSearchAdapter
5
- */
6
- function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
7
-
8
- const configSchema = ConfigurationSchema(
9
- 'SequenceSearchAdapter',
10
- {
11
- /**
12
- * #slot
13
- */
14
- search: {
15
- type: 'string',
16
- defaultValue: '',
17
- description: 'Search string or regex to search for',
18
- },
19
- /**
20
- * #slot
21
- */
22
- sequenceAdapter: {
23
- type: 'frozen',
24
- defaultValue: null,
25
- },
26
- /**
27
- * #slot
28
- */
29
- searchForward: {
30
- type: 'boolean',
31
- defaultValue: true,
32
- },
33
- /**
34
- * #slot
35
- */
36
- searchReverse: {
37
- type: 'boolean',
38
- defaultValue: true,
39
- },
40
- /**
41
- * #slot
42
- */
43
- caseInsensitive: {
44
- type: 'boolean',
45
- defaultValue: true,
46
- },
47
- },
48
- { explicitlyTyped: true },
49
- )
50
-
51
- export default configSchema
@@ -1,20 +0,0 @@
1
- import PluginManager from '@jbrowse/core/PluginManager'
2
- import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
3
-
4
- import configSchema from './configSchema'
5
-
6
- export default (pluginManager: PluginManager) => {
7
- pluginManager.addAdapterType(
8
- () =>
9
- new AdapterType({
10
- name: 'SequenceSearchAdapter',
11
- displayName: 'Sequence search adapter',
12
- adapterMetadata: {
13
- hiddenFromGUI: true,
14
- },
15
- configSchema,
16
- getAdapterClass: () =>
17
- import('./SequenceSearchAdapter').then(r => r.default),
18
- }),
19
- )
20
- }
@@ -1,55 +0,0 @@
1
- import { toArray } from 'rxjs/operators'
2
- import { firstValueFrom } from 'rxjs'
3
- import Adapter from './TwoBitAdapter'
4
- import configSchema from './configSchema'
5
-
6
- test('adapter can fetch features from volvox.2bit', async () => {
7
- const adapter = new Adapter(
8
- configSchema.create({
9
- twoBitLocation: {
10
- localPath: require.resolve('../../test_data/volvox.2bit'),
11
- locationType: 'LocalPathLocation',
12
- },
13
- }),
14
- )
15
-
16
- const features = adapter.getFeatures({
17
- refName: 'ctgA',
18
- start: 0,
19
- end: 20000,
20
- })
21
-
22
- const featuresArray = await firstValueFrom(features.pipe(toArray()))
23
- expect(featuresArray).toMatchSnapshot()
24
-
25
- const features2 = adapter.getFeatures({
26
- refName: 'ctgA',
27
- start: 45000,
28
- end: 55000,
29
- })
30
-
31
- const featuresArray2 = await firstValueFrom(features2.pipe(toArray()))
32
- expect(featuresArray2[0].get('end')).toBe(50001)
33
-
34
- const features3 = adapter.getFeatures({
35
- refName: 'ctgC',
36
- start: 0,
37
- end: 20000,
38
- })
39
-
40
- const featuresArray3 = await firstValueFrom(features3.pipe(toArray()))
41
- expect(featuresArray3).toMatchSnapshot()
42
- })
43
-
44
- test('adapter can fetch regions from with chrom.sizes', async () => {
45
- const adapter = new Adapter(
46
- configSchema.create({
47
- chromSizesLocation: {
48
- localPath: require.resolve('../../test_data/volvox.chrom.sizes'),
49
- locationType: 'LocalPathLocation',
50
- },
51
- }),
52
- )
53
-
54
- expect(await adapter.getRegions()).toMatchSnapshot()
55
- })
@@ -1,106 +0,0 @@
1
- import { BaseSequenceAdapter } from '@jbrowse/core/data_adapters/BaseAdapter'
2
- import { NoAssemblyRegion } from '@jbrowse/core/util/types'
3
- import { openLocation } from '@jbrowse/core/util/io'
4
- import { ObservableCreate } from '@jbrowse/core/util/rxjs'
5
- import SimpleFeature, { Feature } from '@jbrowse/core/util/simpleFeature'
6
- import { TwoBitFile } from '@gmod/twobit'
7
- import { readConfObject } from '@jbrowse/core/configuration'
8
- import { AnyConfigurationModel } from '@jbrowse/core/configuration'
9
- import PluginManager from '@jbrowse/core/PluginManager'
10
- import { getSubAdapterType } from '@jbrowse/core/data_adapters/dataAdapterCache'
11
-
12
- export default class TwoBitAdapter extends BaseSequenceAdapter {
13
- private twobit: TwoBitFile
14
-
15
- // the chromSizesData can be used to speed up loading since TwoBit has to do
16
- // many range requests at startup to perform the getRegions request
17
- protected chromSizesData: Promise<Record<string, number> | undefined>
18
-
19
- private async initChromSizes() {
20
- const conf = readConfObject(this.config, 'chromSizesLocation')
21
- // check against default and empty in case someone makes the field blank in
22
- // config editor, may want better way to check "optional config slots" in
23
- // future
24
- if (conf.uri !== '/path/to/default.chrom.sizes' && conf.uri !== '') {
25
- const file = openLocation(conf, this.pluginManager)
26
- const data = await file.readFile('utf8')
27
- return Object.fromEntries(
28
- data
29
- ?.split(/\n|\r\n|\r/)
30
- .filter(line => !!line.trim())
31
- .map(line => {
32
- const [name, length] = line.split('\t')
33
- return [name, +length]
34
- }),
35
- )
36
- }
37
- return undefined
38
- }
39
-
40
- constructor(
41
- config: AnyConfigurationModel,
42
- getSubAdapter?: getSubAdapterType,
43
- pluginManager?: PluginManager,
44
- ) {
45
- super(config, getSubAdapter, pluginManager)
46
- const pm = this.pluginManager
47
- this.chromSizesData = this.initChromSizes()
48
- this.twobit = new TwoBitFile({
49
- filehandle: openLocation(this.getConf('twoBitLocation'), pm),
50
- })
51
- }
52
-
53
- public async getRefNames() {
54
- const chromSizesData = await this.chromSizesData
55
- if (chromSizesData) {
56
- return Object.keys(chromSizesData)
57
- }
58
- return this.twobit.getSequenceNames()
59
- }
60
-
61
- public async getRegions(): Promise<NoAssemblyRegion[]> {
62
- const chromSizesData = await this.chromSizesData
63
- if (chromSizesData) {
64
- return Object.keys(chromSizesData).map(refName => ({
65
- refName,
66
- start: 0,
67
- end: chromSizesData[refName],
68
- }))
69
- }
70
- const refSizes = await this.twobit.getSequenceSizes()
71
- return Object.keys(refSizes).map(refName => ({
72
- refName,
73
- start: 0,
74
- end: refSizes[refName],
75
- }))
76
- }
77
-
78
- /**
79
- * Fetch features for a certain region
80
- * @param param -
81
- * @returns Observable of Feature objects in the region
82
- */
83
- public getFeatures({ refName, start, end }: NoAssemblyRegion) {
84
- return ObservableCreate<Feature>(async observer => {
85
- const size = await this.twobit.getSequenceSize(refName)
86
- const regionEnd = size !== undefined ? Math.min(size, end) : end
87
- const seq = await this.twobit.getSequence(refName, start, regionEnd)
88
- if (seq) {
89
- observer.next(
90
- new SimpleFeature({
91
- id: `${refName} ${start}-${regionEnd}`,
92
- data: { refName, start, end: regionEnd, seq },
93
- }),
94
- )
95
- }
96
- observer.complete()
97
- })
98
- }
99
-
100
- /**
101
- * called to provide a hint that data tied to a certain region
102
- * will not be needed for the foreseeable future and can be purged
103
- * from caches, etc
104
- */
105
- public freeResources(/* { region } */): void {}
106
- }
@@ -1,30 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`adapter can fetch features from volvox.2bit 1`] = `
4
- [
5
- {
6
- "end": 20000,
7
- "refName": "ctgA",
8
- "seq": "cattgttgcggagttgaacaACGGCATTAGGAACACTTCCGTCTCtcacttttatacgattatgattggttctttagccttggtttagattggtagtagtagcggcgctaatgctacctgaattgagaactcgagcgggggctaggcaaattctgattcagcctgacttctcttggaaccctgcccataaatcaaagggttagtgcggccaaaacgttggacaacggtattagaagaccaacctgaccaccaaaccgtcaattaaccggtatcttctcggaaacggcggttctctcctagatagcgatctgtggtctcaccatgcaatttaaacaggtgagtaaagattgctacaaatacgagactagctgtcaccagatgctgttcatctgttggctccttggtcgctccgttgtacccaggctactttgaaagagcgcagaatacttagacggtatcgatcatggtagcatagcattctgataacatgtatggagttcgaacatccgtctggggccggacggtccgtttgaggttggttgatctgggtgatagtcagcaagatagacgttagataacaaattaaaggattttaccttagattgcgactagtacaacggtacatcggtgattcgcgctctactagatcacgctatgggtaccataaacaaacggtggaccttctcaagctggttgacgcctcagcaacataggcttcctcctccacgcatctcagcataaaaggcttataaactgcttctttgtgccagagcaactcaattaagcccttggtaccgtgggcacgcattctgtcacggtgaccaactgttcatcctgaatcgccgaatgggactatttggtacaggaatcaagcggatggcactactgcagcttatttacgacggtattcttaaagtttttaagacaatgtatttcatgggtagttcggtttgttttattgctacacaggctcttgtagacgacctacttagcactacggccgagcgcaataacccccggaaagcacttgctactgggaggcgggtttatccatcggcaataggggttatcagtactaccaagaagattgtgaagatattaacagcattgaaaaaagttcggactgggcatgaaacgtgtgtcagagttagagtccttgagggactgaatgggtttgtcccaggcccaagcttgaggtggatgtcacctcgggtactgcctctattacagaggtatcttaatggcgcatccagccttgtggctgggtctacgtacgcgtgggcaccatacgtatgttggcaggaaaggtcaatcatgcttgtttcctcgtcgcagaaacgttcacactattggctcgcgggatcgaacgggcctgattatttttccagctcctgcgttcctatcacgccaactgtcgctaataaaatgttatatagagataacccattgctatgcaaggatggagaaaccgcttcacaacaccctagaattacttcagcactaacatctaagataccgggaaaaccgtaggtgccacttggttttgagggcaatgcctcttgcactggcgattcgtggagtaaccttgctaccgatttccaccttttctaggtatgattacatgcgatcgccattgtcagtcgtcgtacgaaatccaggaaggaattcgaatacatgaccgaaagctatggcatcataagcgtggctctttactaaggacacgtgtagtcggctgatttcgcgcagaacttcgctcaccggacagtgactgctgtccgaacttgggggcagcgtagattctagctagagaccgcagcgaaaatgccactcgctaggtggctatggacgtccagctataggcccccacattcgtatgtatactccggtaattgagtctacctttcgaaagatcaaagttcacaaaccttctctcacgttaacatagatgctcgcacatagctagtccggtgataaagcggccgtgcatgcgagtatttagcgcacggaacagatattaggctgcgaaataccctcatatgctacagcgcaggtaacagacggttgatctccccgtagaattccctcaaggccggatcgttctcatgagtagcctttgtctgacatttcctctcaatagattgcagactcctgtgtcgtgggaaaacttcgcggaatcgctgtcgttacataaatctaaacagtgcagtccaagctatttactaccacgtatcataatgaacatctctttgtgaaatacgccggtacgccgagagatcgcccacattgcgtgtcaccaagacccagtgtctattgggcgcgctggttatagtatgcggaggcacccgatgtgctgctaatcactacaaactcgacaccaagaggcgaccgcgtgcgggagggctagaacgcgagagccacgtcaacgtggtggtaccgctcctgatgatacgagcactgtgctggcaccgctgccctatgtccagctaacaggtgtcacataatatcgcatctatagttgagtatcttatcgctagcgttacttgtgagttctcgggtagaatcgtcgtagcattctagtccttagcgtaagcaacgatatcgccgatattataggggcaataggtctcacccaccacgggtgtatatttaacgccctaagtagttaacggagactattaaacaattatgcacgtgaaagattagggtactgcacacgtgtcacgttgacgatgtaaacaccataaaggttgttctgtgatgcgatgcccatacctgcggtgcaacgtcctaaacttatgcggatcaccttctaattcagccgacgttgagaacgccagctatactctgtgagtacaaggtgaaagccccagatcaaaatattggagtcttgtccgtagctcttgggtggagagtgtgaccacgtttatcccttaatactgagactcttctcgttccacgccccggacattcgcgatacagcctagtttgataggtggctacaagggctctatccgaatagcacaaaactcagtcctagtgcgtataggtcgtgctctgcggttatacgctccacagaagaaagtacccactgcagtttgtcggtgggacttagcaaaacctgtaaccaaaaccgcacatggactctgttttggtggcgtggagtgtgcccgccgcctttatgctgggtcaaaatactatatgatttgttgtggtcgggcgcgacattggctcttatggtttataactattattcggtgcacagaaccgacttatgccccgattttgcacctcccgagagaaatggtactagtcattgtctcggggttttacaactcaaggataatctgccagcggtaccccgaaaaatcccatcccgaacggctggtacctatgctggagaccgaaatggagccagtgctatgcaaaccctcgctctttctatttggcccgaccagctgcgagagtcattcgacatacattgcgatggctggttcatctctctgcttcggattccgatcctgctgcctatggccacaacacgaaagagatcttggatacgtcctcaccatagtccaacggacaaatatggaggtgtacgcgcacggatacgagtacgacgggccgcccaatgctggtccttcgtgttatactgtttacttgcctccggtaagagtgtacagcttgtacccacgcggtggaggaccttacgcgtcgtccgcaggtgtggagatttcgctacctgttgcattggggcctcgccttacgtttttttcgacggaggcccgacccgccaggccagaccctcatcattgggatttttactgccttggacggcagattctgatgctggtaacgcgcttggcacacaccctggtcgtaattacgtactatcacctctattttaccaggggcgggccccgcctcaacgatcggtagtctcgttagaacagttgcttatactccgttagcactcacaactcggagaatgagcttacacagtccgtaatagtctccacagcttcccctggaaggttcgtacaggggccctggggtctaatgtgctaccgcctaacttcgttagtgtaaggtctcgtgtgcacctccaataacgctgcatttttgtatagaactcctttataggcctgactcttcggaacagcccactaattgacgtgcacgatgctgcatatacccttctcaatgacgcataccggtgactaaatcctgtggctggttgacactttgcataacccaccacgaaaacgcggtttgcacgtggttggaagcgagtaccggttaagggaagttacgtaaacccaacatagtgagcgatgcttaaaacactgcatgcgaacaacgaccggaacgagagcctaatagaaccaaatggataggtggttacgaaatccgcgcacaagtgtcgtgccactctcgtaaagaatgattgcttgcttatctatgagaaacctaataggcacgcacgtgtcgccagggaaaaaccaccatccgacaagacgctgaaaatcgagatagatgcagcccgcgcgtactttaagcacgatagccatcttgagcgcgacgattcagcttacggagattacttctcaaagcggacacctcgacgctgaagctctctatcgatgcacttgcatgtccatctacggcttgagcgaaccatgcttaacgcttggatgacgttgttagtcggattcgatcgtaccatactgtcctatccatcataacttcccgaattaaaactcattttctaccctcatttgtttcattggcgcatatgagcgccccatgggcgctgatcgacacaggcttgtagcgcacggctcgtcttgcagtagataaccatagtctttacgtcgcatatattaatatatcctcagacttccactgcggtattttggatcgtggcgtctgggacagtcacactctttaacgggagcgcgttcaatgtctgagtccatccgtgcagttcggtgcgattttattcttccctgcatcttccggattccttcttcttgtcggagaattcgccgctcgatcaaactcatcattggtacttattgaccgtttcatgctattacaccggtacactgatgataacgctgcggttttatcccccccaatacgcgcacacacgcttctttcggtgcgtcctgtcgtacccctattgcgcatcatggcactccagccgagcaatgctttggacaggtgtaaccaagctggatctagcgtgggttcgacacagctcggttcgtataaccacacgcatgaactgcgagtgcctcgccccagcgccgctgtctacttgctgtttagaggaagaagcaacagcttgcacccaatccgcatatctgcatataggtggccgttcctccgtggcgcgccgctacgttgtagcgcacggatcaaaagcgctgtgttactatacactggttcggagacggttcatgacgagcgcgctatatgtcggcatctgcgccccatgagcggccgctgtccggcggcacgaataatatagtgcaagaaaaaccgaagactacggttatatatgatggaacggccctcacagcattctaacaggtttgacaaacttaataaatgatgggccgcgcctgctgtgaatcccggacggtttggccggaaatacctaggcagtctttggaaaagcttttcctagatcaccatatcgttgtcagtggccaaggtttcgttaactctcggcgtacccagtatcggcgcaataggcctttgatcaacccttggaagattagtcgatcgtaacttcctacatcccggtgaaaggctttaattctaagtcttcgccacaaacgcttcaggagcgtcgagttctatcactttcgaggtactgccacttactatacaccggtacacttgttaagcaagtgtttgcggatgtggttaaattttgatggcagatttctgggtgttttagctatagctgtatcctcgaggtcgtcgtttaaccgctcctgttgctagatcatatgtatcgttgttcgagacgctagtagtcgctcctaccgaatcttacaggttcgatctctgctcggcttttgccgcgggccggtgcttgtgctataattataatgataagggcagtggccgcacaactgcagattactgacacttgagtgagaactaagccttgaagcatagtgttgaatgttgtagaaaagtatactgtgacaaaaacagggcctggtgtcaagtgtcctcagtgatctggatatcatcacgccttgttagcaggatttacccgcatagtaatggccggactttatattgccctgctgcgctagctagtactgcgggggctctcttccccctattgatattccgggcagaatgcgcgggtagtcagcattcatgtcaggcttctatcaacgtctcattcacccttggagtgtgacctacgtgttagaggcaatgtagcccgagagcccgttcaaagacaaactcccgaattaaacagacaccggttatgggagtgtgagtagtgacttccgaccagtgtttggtttcagcctgtcggttaacctcgcagggctaggagaatgagctgctagtaggtgattaccgaagtctccccagaaagggaacagtcttatagagtagagaatgtcaaatagcgttattgagttctgtctactgcactaccaagagcatgcccaccagagatgcgtcgcagtcgtagcgtagacgtcgtaatgacccaggtggcgttcggcctattcgcgtcggacgcgcgcgctactacaacgaagggttctgaaagtgcatgttcacactgaaattctaagtgttagtaaacaaacgcgtgtattccagggtcgtgtgtgacattatggctgtctgcgcccctcaatgatcatcaagacgttcaattgtatgttaacgtagatatcaggtttagttatccgtatactttttacgccgcgcgcttggaacagattctcctaacagccctcgcggtttcaaaaagaaccaaagtctataccatccttgttcccaattctgcctggttgcggagaaaagaccgcctccatacgtacccgactcggtattggtaagtggggaagcagtcgaacgcatatttcttggttatatcacaggccacgttctatatcggaagtggccggattacgatttgacgttctatccccgagagcgcattcttgtttgttactactaccacgcgggcgcttcttattcccagaccagagggaatgtgcggaagctttttccacagattggcggaactccagcgtgcttagtgcaggcggagaacgtccgttcagtggtgcgtgctttatttttcaatctgacccgacctgcgctcaagggttgcaagttgttgtgcgcccgagtaataggcgactcgtcgcaatgggtctggtacattgcattttcatcggtacggcgcttcataaagtgcggcaaatttctcaccccagtactcatgtttatagggtatcaggacccgaagcttctctgttccaaagaaatgtactgtttggctcccctgtccatattggaggtagatcacttgtggattatgcaatgaatgaatgaaagtttggtgctccccaccggggcgctctcaaagagagtgagctaaatttgaacatttaaattgctattccaacccggagtcctgaccggaacagtaatgaaacttcaaccatgccggacagactagaagaagggaaagttgcttgtatatgggagtaaaaatgatgttggtgccgtaatggtgccggaagtgactatagagcatgtcgtgacgcaccggtaggcagtgctataatcgtatgtccttcaggcgccgccggacctacgaagctgaaattagacaccggcacactagccccgtcagcgacggtgcgcggccgctgccctgcagcgaatggggctaacacgcataaaacgcccgcataaccactcgagctacgggaattcactcaggctgttgcttcgacgtgtagtctcattacataatcataatacctccaagaccaacggctgctcatgactctcttaccttgttagggacatttcggcactagggaagagctgaggactttgaaaacgtcgataaaaccatcgcgggaactagctgcgttagaactccatattttacgggtcgcaagcttgaggtcctgtcccggcagctgcaagtgctacggcaggaggggatctacctaacgtgcagtaacgagcccctgcccgtaatgaggcgtactcgtctctaatcgtcagtaagttactatgtccgaggacgcctctacgagttgaactctggctaggcccacctgtccgcgccctgctcgggtaccccatctgcttatccaacttcacctcgccttacggaatctctggttgccagtcatccgatggtcattaagcagcgtggtacatcgtagccaatacttcagggcgccagccatattcccagccaagcggctgcataattacagcgcctggcacgactaatcgatcccacaagcctggtagatgacccttagccctaaagcgccctctgacctatctgcacgtgatacttgattatttgtaatgagcggacagggtagatgactaatatacagggtcgtctaggtttgcacaatgcagacatcatccgcgcaaggcccggacggctgtactcacacagctagctccatctccctcagcagcactaagattcccacgtgaccagggcgacgggcctcagccaaacgtatccttgatatctacttaagtcaaggttgactccgaaccctatgggtcggtgccgttaacagggagtctatatctcggcgttccattgcttgtttcaaactcctgctataaggtgaaagcgctggagggcatagtttatgcccaaagttgcgcgtagatccgtcgggatatgtgctataataaggactgctcgaggtaggcggtaacggctcccgccttcagtaggcgcggaactcgaatcggagttacaggacttgaccgagtcatatccaagtttatgttacccgatcggatccggatgctcgtatctgcgacgaggtcggaagacggacgaaatacgattcaaccgcgcgaaccattagcatctaacctttagcctcaatgggtgttaacgtggtgggctcactcggcgtactctttgtgcaactattccgtatgaacaacagtcaagttgcgacatgatgctcttacgtgattcccacagtttcccacctcaggatgctttctttagctaaacccaatagttatggcggcaccttcagactcccacgaggacggctatgacgttgctaaaccattcgccgccaaaggctagcgctaacgagttctgtgagtttgttccgggccagatctccaggatggtcgcaacaacgcagtaccggttttatactggtgaccctctacctgttattaagttacagcgttgtcctacgtacatggtcgtgagtactcgcgtagtcaaacgccaggactagcagcgagaattattgtcgcgatacttactacaatacttacccgatattgacgtgcagggttgaaagagatggacagttgaatatctattttgacggaatcctcaaaactccctccacctcaggtaacggccctgtccgggaccgcattcttgcatatattggttcccagagcgtatctaagttagtctcttgaccgttcaccgactctagggcgactcgttatcgccctccgaaacgatgctttcgttacctcaatgatgacaggctgtaacgtaagtgatcccaatctcactcgtgccttgtccaccgttccgtgaagacgaagcaatacgcggaatacgtggcttcgtaatattttgacgatatggggctgggacgctcaagacttccatgacaaacaaagtgaagagcaactgcatccctcatcatgatcactattaccagagtagcgatggataacgctaatttggtcagggcagctatcgcatcccgcaggtgtaggcggagactttttcttttgttgcgagttgacaggtaatctcacggtataagcacggttatttacgcaagcgacgtccctgggagaatccgcccacgtaggaccccataatccataaatactgcggtcgaaaccttcatatcgtgacagaaccgctttctagggatgcggtccccgcattcagagttctactttggccagcgtgagacttaacaactccacttacgcggtacattgaagtcgttcagtccagtgtgacctgtgtaccgaataacgtgtagaccagcgcgtctacgacttagcgcggctccactccaaagcaccttttgggactttccaacgagcctgttggccgttaagcggtatttcacaaatagatcaccctagtgtcggtaaccgactaccctattgggatcatcgtgagctcgaaacactagaggcggaccaacggatgacatttgattcggctctacagagcttgtcgccagagaaaaactgtggcaatctacgctcgcggggaattgactttagcggcccctagacaggtgtgggacactagtctagattcacgtcctacacgacataacagcaccttcctggccagcccagaaatagtacctggacgacatccagccttccgacgccataatgtgagccgtagcgcccacgacgatcaacgaggagaaatttacaaaggctgtgtgaatgctacgtcgtctaccattgctcatcgaaacgaacgcaacgcacagcatacaacgtttaccatgccggagcgggatcctcaagtacagaaaacagaggtctaaacatgatccgaacaaatcggtaggtttacacagctacctcgtccattggcgtactgcatcgatcgtgcttactacggtcatgccggcccgcgatgcacgtacgaaggaataccctgtctgcccccgcgcgagttacgctgtctcgcacataccgagcactgtcgttcgaagctaaactatgagcccagccgagctccttatggccgcaacgctggtgcggccagctgataaattccacagtacacgatcctcgtgtaagatctcgggcatagtaagtcatttcacatggttaggagagatagaatacatggttctggtagctcaaccaggatttgtggaacccttggcccttggtgagtgctacaataaaattctccgtatgggacaaccaaagggtgctggatgtgacttcccggcccaggttagatgtccatatcattcatacattgcccgaccgacccaatgcctaaatcagaggcgccttagctagttcttgtagtgtgccacgtccggccacgcagacacgaccctcggcgagtgatcaccattaccggattggcatcgaagtctttttctgggaagttagccagtttggtgtgcggtgcttagaatcttattcccagtcaaacgcccctgggacgaattgctaaccctagttgccacgccggaaccatcttcgggagagtagacaaatccgagttagatatgttagcgtcttcgtgagtctgaaatgtatcacttcaccgcagaatacgcgaatgtctgtttgccctggactgacggaattggcttaaaagccgactagagcattttggtacggttcctatccgcgatgtaattacctatctaggttatcgctagacgaatagcgagtacagtgtagcaggccctttgttagcaagttgctctaaacagttgtcaaaacgtaggcacaatagtgcgattcttctaaatccgggaagctcatggcgctgggcagaaatatcacatacgggaataatcaacctccattttggttcgttttactcgatgagtgccccttgcttgagacgagcgttctgagttgatggcatgtcgaaaggtttacgcggtgagtagagcactttacccctacagatcggaatcctcgaggaggacagttggaacttcacattaacctttgttcgattgcatgaaggttgtgttctgggagtaggctcccaaggtagcggttcatgctgggggcagccctaagtttgtattatgtgagtttgcgtctgaaactacatttagcatgaggaacgtaagctttctggagggatcttctaaagccaggtatcgcccgctacgatgccggagccggtggttcacagctacctgtgctcaaaggcttaaggctaatcatagcaacagtgcgaaaggacgtctttcagatttcgaaaggtgctgacacaacaagggtcagggcggtcctacccttctgattccctacctggttttttagcaagggtcaaggctaggcttatactcccgaacgctttaaacactatcccacccctgacggggggaagttgcgcgttaagtataagaataagatttaacagtacactttaggttcctcttccgcgagccgtcatacagcaccgagcgccgttgaaacgcgattaacgcgtattgtcgtgcgaaaaaaaaacgctcgccagcatattggagtgtcgacttgaaatattgaacaacaccgcatatcaaggacgaatagtagggcttcactacctccacctgacggccctaggacttatactcgaaaaagaccttccatcacgatgtcccttaccggcgagagggctatatacgcatgaatagcagatcttgccgtcgctgagtgtcacccagggttgctccagaaaggagatagggcggagagccatcgacagcagctctcgtctaggtggtagcagctaaggagtcgtgtcgtcgcgccgagttggaacattatcgatgtacatcaatgcagtaatgatgctgatagactcgggagtttcctcaaacccagagttacgagaagacgcaggtctatcagttagaaggagtcagtattggcctttgaaagatcttatgctcatgcccaatcgtagttaaacgcgaatcgggaaggccaatctggcggttttgacccccggactcttaagacgtccaatgtggctagacataagtaacgaattactctataccgaggggcgggaaccggccaatttattacgagagcacgagagccttgtagcggccagcacactatcctcgagtccctctatcctgagacgtagatatacatatacgcctagagagaatagccgtctaggcttccgtcgccctctccgtcgttcgcgtgaaccgtaagtcttccgcattcccttcctcaagcgcgttggtgtgagagtggtattgaggcccagtcttataacgcatatacttgtgcactctattacttaccatgggaaccaatggcactctcgaatcatgctcacagctgagcaacggtgctgctcaccaattacatatgagtcgtggtttagcgttggagcggaagatgaatttccatctgttcgcgcgcatcactaaccaatatacggttatcccagcgctatctagttctgaccgggttggtagcgaacccttttgcaagccggcttagtggatgtgaagtgggagtgataacttaagccgccacgttcgggggggactcgtttatattggtgctggaatacgaacggcgtgattcgtagtcgccctaatcgggcgcgacaacacatgtagtactgtcgaggcggtttaaacccacagtaggtactctatcagcagaattatgctagaagtttcacaacaactttccgcatgaggctcagcggcagcgtcgcactcccaatggccagtgccggtagcgatgtttggtggaattagttccttcggaatacgaaccggatttaaagagcctcggagaacctaaacgaatccgtacgcatcttgcccaaggtgctgagccttgtcgcctttctcagttccacctacattaatgcaatgcgttcgaagctctgaccgcaaacaggaatcaagttcagacagagtgcaagagtttcgcaataattgggaacgacccacttgatataggtgcttttagagatgtgtgtacgaccgtccttcgagcatacctacgggttacaattgctccggtaagtcaaggcacatagaaaacatagccaactgagagtgtatacaagattacctcatgtagactgaaatacacacatcgctttaagctctcaaccgatgtagaacagattttgggcggcgttgacagcgtgcccgctcaccggtttgctcccttctcaccaaataaccatgagacgactttggtgactggactgccagatgacgggctacaaccgttttggttccgaattcgctctaactcaactaacatcatactatatgcgccaggatattctcgcggttggacccccctgccaattcgggttaaaaccactccccccatgtagggagctgccgcaattacaatatcgacgatcccagatggacgctcacaaaatatcagtcctttcacgatccgctcatatagacggatgaagggactgaggctgttagatagtgacgtcgagcatggcgtagacgagcgcaaccgggtcgaggcccgcattaccgtgacacccagttgaaaggatttacactgcttcattcgatatttaccactttgtatgaggagctcaacctaagtcaacacggaccatcatacaggtcgccagtaatgagaaggctgctgtgccatggagaagcgctgctacagcacacaacgaacatcttgcaatgtgaaggagggtgctcttttgggatgagcctacggggatgtgtatccctgccctgtaggcagttgggacttagcgcgactatctagataactaaggcgccagccgcggctgtttgccgaagtcgtgctgatgctgtacaacgaagggcgagcgtgttaacatgctacacgttgacctagactagtccaagtctgaaagtcccaatttaggtcgggtagtacagtcctcggttccagtcccatgttgtgccgacaaggacaagcgatcatcaaatcgactgaaattgaatcagctacctcagaccacattcagctctcggtaacatgggaggcttgtggttgcaccgtaaaagggggatagcccatccatcctgtaaacctacaatcgcgcgtagcttaatacgctcacattagacattcgatcgagagacctggtttcaagagccttcccttttgctttagtgggccaaatcgcaaccctgctcccctcccttacgccttatacacttcagtgcaaattcatgcgttcagcgaacaactggacttctgttgtacgtagtccacgggggcttattcattatagaaagccccctactgtcaccgttatatggttcacacatgagctgatcacctagagagtcgtcatgcacattcgcctaacaaggacatatgagtaaccgggaggggatatcttcgatttgcagcaccaatcgacgttgtactggtctattgtcggttaggtccgattatccgaccggcaatgaggcaagcccatctattcaggaaacttaggcagttccctgtgctggcccgacgtcgatgagttaagtctatacaggccggccgcgagtagttaacgagaccaacatagaactatcatactagccggcaatgatcaatagggtcttagtgccactgtccttcgagccctcgcctaatttagcgcgaccggtttcctattggcctgtggggttgcgggcgcgtccgctttaagaatggtccttaacacctacccggagatccattgcatagcacactctccccattagcctagacacgtcgtcgcccgtcgactttggctggaatttaatcgccggggatatcgaactttcacgccctttaacgacgaggaaacctaccgtcgcctggctggtaaatgggtgccttacggggactcacgatgctgtgaaccgcccgccagtctctggggctcccaaaatccaggttggaattacggacctccgccggtactacgcattacggggtggaaagtcctaagataggtgaatgaaagggcttcgctaaaccagtaagtcattaacaggacatcggcgtcacgtctcgcgggtttacacggcgcacaaatcctattcccatgataaacaccttatgccaatccacatccctcgctgcctaataaaattgtcacacctgcgctactgactaacgtttacgcaatgagagatgaattccgacacccacgcttgttgcaagcacagccgtatgggttctcgggtaaggtaacacgaggcacactccggcgcggccacttcggcccctccctgacgatgaccctcattggtcaagcatcagtcgaatgattcgtaacaaggagcaaccgactcagtagagagggtgaatctcacgcgctagcctgaggaccgcctaagtgcttgctgtgcgtcgcggcagtcgcgaggtgcgggctaaagtaaataattactggtcttacctaattaaagttggtggttagggacaacgttaccactaccagggtgcgcccctgaattcgggtatcggactatccagggcgccttttgcggccttaaatacctttttaatcacgctggagctagaaggccatcgggatagacggggttctaggtactcgaaaaaacaggcctaataactttattgcgcttggactaacctatgtacaacacgttgtagcatactatggaatgttactgacctacacggatagcatttgttcgggagcgtcattgacctcccagaccctatgccgatctgcaccattcagtgaccatccacaagtctctaggtttagccaaaggtgacaggtcaagcacttgcgcatgtccactagtcgattatgcaacgtctctgaacagttagcacttatctcccgccgtgtgactcacgcagtgaacttacctatagcatacgcctactattgaatgttcgttgttctaacacagcgctaatacctcactggcagaggtgcgcacgctcctagtatgggagggagtcaggtcagagtgtatgagactgatttttattcccgataggggttcagtgaaatcgacctctcaaaagagaggcgcagaattcgctgataagctctgctacgatcgctaaggcacgataagcagggcggtgaaggttggagcaagataatatcacccggacgcgggtcctgtcgcaacgagcggccgtgagacctggtgcgcaccgtgtctcgatcggccgaatatcggaacccactgcgtgactcaaatgatatttttgctatctgtgggggatttatgtcccggtagaactctgcttctagcagaggataaactttacaaggacggcgaatatggtgtcagagcgccctaatgatcccgtgctattccgcgggccaccggccgttaatggacttcgggttagaaggatgggttattcatcttccacagaaacgcccagccgcaatcgtgggtttactcgaccgcggttatctgcctacttagctgcattcctaaaacaggattaaaaaggccgcgagggttgcgaacctatggttgagaacagagtcatagagtcagatgcgcagggacggcacggatccacatggcagttaactaatattaatacccccttagcctcgtatatgggcgtgtgcagtcttgtccactcgcggacgcgtatccgagcgattctgtcttccaacgctattcgttaccactttggcacctctttgctaagcaggatgagaacatctcactcactacgagccttgactttcagcacgcggtacgagggcactgggcttctcgtcctttgctagatgtaggtgccttcccgccctcatgacgatgtcacgtctatcggtttattaaggtcggggaccattacgagattaccccgcgaccttcgtccaaatgggatcacggcaacgttccacgaggggcgcgttgcctgagccactcgggtatccccttccgatatccgcagaagtctagctaggagcaccgccaagcattacccgattaagcaaagcctactcatcgcatacacggttcttggggtttgcgtcagatagcaacttccggcggcagtagagatgatattttatccgattgagcttgcccagcgcaccctcgggccccgtggctcttctcttaaatgtgccctgcacgatgttagcggttcctactcctccccgagccctatgggtggacagactcgccctctgaggctgcgtgttcaactggttccaagtccggcgcctgtggatctacgacgcgaccagcaacattataccaatgtctaggcttagctcgaaaactagtaagccttagaactagggtcgtagcttcttctaaatgaagggcagcgtcatagccatccacgttagcgcttactcaatcgcctgtcggctgtcatgttaccgctgccgtaagttcgtgaacataaaatacaacacattttaggtttaacaaggattgtttaccgccacgtactggtgccggtagtgaaacgaaaaacctcagcatcgggaggaggagaacggaatccctaccaatcttatctctacttaaagaacaaagcgcgcggtacatggcgcagacgagaatgaatccccgaacgggccgagttagactcctcaacctgtcgaaaagttgcgatccgctagatcgtagagtacggacttaaaaaagaaaagaaggtctctacccgagcggtgagcccaaccagttccaggttgctgccggattcttccacacggcggtgccatatggacgaccccgtactttgggcattctaggctacctactgcgaacgcctcgcgttcatgcgcaaagttttctctagataggcgcgctttggtaagcatagtaataggttcttcagcgtctaaagcccgcccattaggcctggcgactctgctttagtggtaaagagatagcatcgatgtacatcgatggagagagtattttcacgaaagtgcgcgccgtacactatttatcggcatgcgcgctaaactggagggtctaataaccagatcacgcaacgaggtcccatgtacggttcgcattgcgaaagtatgggatactagaggttttatcgggcctcgcttgaggtctgtctgggactggcgcacatcgctcgtcgcccagtcgatagcggggtgattaaataagaaatatgttagtgcccggatttggaaccaaccagtcccggtagcggtacaaaaagcctttcctgctagttctatgcttaaagcgtactcctgttacaatccgtaggcaacctgaagaggcaacctggttttcctttatttcgactttgtttgccatttccaatgtgatactgtgcggcgaccttaatgctttttggtaaaaccataccgagatccagcgcacgcgacattcagaccggtcccggtttggcggtcaacctcgtactctgcactgttcagctagaggggtctcctatcccgaggtaccggtcgtctaacgggtggttacaggggctggtcctactctaccaacagttaaggagggcaacaagttcgatggggcatcgtataacttgaatgccattggacaaataataattgctccacgtcccaaacctcaactgaccttgtacgcataggtgccacctgcacgcaaccgagctcgttcaagtgtccttcttagctggcgccgagtgaacctgcatctgagagtctacccaacgatctagtatcataatgtctgtagccagcgactatgacacttagagagccgcctaagaaagtgtttgcggctcctgccccggtgcgcttgttcggtgggaggtcgttatatagaaccatggggatataatgaatggtaacatatctgccacgttgacaagccgctattatgaattcagggttggatactattatggcccttcacggtcacttgtaggacggccccaaacaggattagtaaagtcggtggtctaagtgtaagcgataggcaaactgcggttattcgcgtagaccgcttgatgatgtaaaataacagttttcatgtctttgcaattac",
9
- "start": 0,
10
- "uniqueId": "ctgA 0-20000",
11
- },
12
- ]
13
- `;
14
-
15
- exports[`adapter can fetch features from volvox.2bit 2`] = `[]`;
16
-
17
- exports[`adapter can fetch regions from with chrom.sizes 1`] = `
18
- [
19
- {
20
- "end": 50001,
21
- "refName": "ctgA",
22
- "start": 0,
23
- },
24
- {
25
- "end": 6079,
26
- "refName": "ctgB",
27
- "start": 0,
28
- },
29
- ]
30
- `;
@@ -1,34 +0,0 @@
1
- import { ConfigurationSchema } from '@jbrowse/core/configuration'
2
-
3
- /**
4
- * #config TwoBitAdapter
5
- */
6
- function x() {} // eslint-disable-line @typescript-eslint/no-unused-vars
7
-
8
- const TwoBitAdapter = ConfigurationSchema(
9
- 'TwoBitAdapter',
10
- {
11
- /**
12
- * #slot
13
- */
14
- twoBitLocation: {
15
- type: 'fileLocation',
16
- defaultValue: { uri: '/path/to/my.2bit', locationType: 'UriLocation' },
17
- },
18
- /**
19
- * #slot
20
- */
21
- chromSizesLocation: {
22
- type: 'fileLocation',
23
- defaultValue: {
24
- uri: '/path/to/default.chrom.sizes',
25
- locationType: 'UriLocation',
26
- },
27
- description:
28
- 'An optional chrom.sizes file can be supplied to speed up loading since parsing the twobit file can take time',
29
- },
30
- },
31
- { explicitlyTyped: true },
32
- )
33
-
34
- export default TwoBitAdapter
@@ -1,19 +0,0 @@
1
- import PluginManager from '@jbrowse/core/PluginManager'
2
- import AdapterType from '@jbrowse/core/pluggableElementTypes/AdapterType'
3
-
4
- import configSchema from './configSchema'
5
-
6
- export default (pluginManager: PluginManager) => {
7
- pluginManager.addAdapterType(
8
- () =>
9
- new AdapterType({
10
- name: 'TwoBitAdapter',
11
- displayName: 'TwoBit adapter',
12
- configSchema,
13
- adapterMetadata: {
14
- hiddenFromGUI: true,
15
- },
16
- getAdapterClass: () => import('./TwoBitAdapter').then(r => r.default),
17
- }),
18
- )
19
- }
@@ -1,5 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`plugin in a stock JBrowse 1`] = `{}`;
4
-
5
- exports[`plugin in a stock JBrowse 2`] = `{}`;
@@ -1,122 +0,0 @@
1
- import PluginManager from '@jbrowse/core/PluginManager'
2
- import { FileLocation } from '@jbrowse/core/util/types'
3
- import {
4
- makeIndex,
5
- getFileName,
6
- AdapterGuesser,
7
- TrackTypeGuesser,
8
- } from '@jbrowse/core/util/tracks'
9
-
10
- export default (pluginManager: PluginManager) => {
11
- pluginManager.addToExtensionPoint(
12
- 'Core-guessAdapterForLocation',
13
- (adapterGuesser: AdapterGuesser) => {
14
- return (
15
- file: FileLocation,
16
- index?: FileLocation,
17
- adapterHint?: string,
18
- ) => {
19
- const regexGuess = /\.2bit$/i
20
- const adapterName = 'TwoBitAdapter'
21
- const fileName = getFileName(file)
22
- const obj = {
23
- type: adapterName,
24
- twoBitLocation: file,
25
- }
26
- if (regexGuess.test(fileName) && !adapterHint) {
27
- return obj
28
- } else if (adapterHint === adapterName) {
29
- return obj
30
- }
31
- return adapterGuesser(file, index, adapterHint)
32
- }
33
- },
34
- )
35
- pluginManager.addToExtensionPoint(
36
- 'Core-guessTrackTypeForLocation',
37
- (trackTypeGuesser: TrackTypeGuesser) => {
38
- return (adapterName: string) => {
39
- if (adapterName === 'TwoBitAdapter') {
40
- return 'ReferenceSequenceTrack'
41
- }
42
- return trackTypeGuesser(adapterName)
43
- }
44
- },
45
- )
46
-
47
- pluginManager.addToExtensionPoint(
48
- 'Core-guessAdapterForLocation',
49
- (adapterGuesser: AdapterGuesser) => {
50
- return (
51
- file: FileLocation,
52
- index?: FileLocation,
53
- adapterHint?: string,
54
- ) => {
55
- const regexGuess = /\.(fa|fasta|fas|fna|mfa)$/i
56
- const adapterName = 'IndexedFastaAdapter'
57
- const fileName = getFileName(file)
58
- const obj = {
59
- type: adapterName,
60
- fastaLocation: file,
61
- faiLocation: index || makeIndex(file, '.fai'),
62
- }
63
-
64
- if (regexGuess.test(fileName) && !adapterHint) {
65
- return obj
66
- } else if (adapterHint === adapterName) {
67
- return obj
68
- }
69
- return adapterGuesser(file, index, adapterHint)
70
- }
71
- },
72
- )
73
- pluginManager.addToExtensionPoint(
74
- 'Core-guessTrackTypeForLocation',
75
- (trackTypeGuesser: TrackTypeGuesser) => {
76
- return (adapterName: string) => {
77
- if (adapterName === 'IndexedFastaAdapter') {
78
- return 'ReferenceSequenceTrack'
79
- }
80
- return trackTypeGuesser(adapterName)
81
- }
82
- },
83
- )
84
-
85
- pluginManager.addToExtensionPoint(
86
- 'Core-guessAdapterForLocation',
87
- (adapterGuesser: AdapterGuesser) => {
88
- return (
89
- file: FileLocation,
90
- index?: FileLocation,
91
- adapterHint?: string,
92
- ) => {
93
- const regexGuess = /\.(fa|fasta|fas|fna|mfa)\.b?gz$/i
94
- const adapterName = 'BgzipFastaAdapter'
95
- const fileName = getFileName(file)
96
- const obj = {
97
- type: adapterName,
98
- faiLocation: makeIndex(file, '.fai'),
99
- gziLocation: makeIndex(file, '.gzi'),
100
- }
101
-
102
- if (regexGuess.test(fileName) && !adapterHint) {
103
- return obj
104
- } else if (adapterHint === adapterName) {
105
- return obj
106
- }
107
- return adapterGuesser(file, index, adapterHint)
108
- }
109
- },
110
- )
111
- pluginManager.addToExtensionPoint(
112
- 'Core-guessTrackTypeForLocation',
113
- (trackTypeGuesser: TrackTypeGuesser) => {
114
- return (adapterName: string) => {
115
- if (adapterName === 'BgzipFastaAdapter') {
116
- return 'ReferenceSequenceTrack'
117
- }
118
- return trackTypeGuesser(adapterName)
119
- }
120
- },
121
- )
122
- }
package/src/index.test.ts DELETED
@@ -1,20 +0,0 @@
1
- import PluginManager from '@jbrowse/core/PluginManager'
2
- import { getSnapshot } from 'mobx-state-tree'
3
- import ThisPlugin from '.'
4
-
5
- test('plugin in a stock JBrowse', () => {
6
- const pluginManager = new PluginManager([new ThisPlugin()])
7
- pluginManager.createPluggableElements()
8
- pluginManager.configure()
9
- expect(() => pluginManager.addPlugin(new ThisPlugin())).toThrow(
10
- /JBrowse already configured, cannot add plugins/,
11
- )
12
-
13
- const TwoBitAdapter = pluginManager.getAdapterType('TwoBitAdapter')
14
- const cfg = TwoBitAdapter.configSchema.create({ type: 'TwoBitAdapter' })
15
- expect(getSnapshot(cfg)).toMatchSnapshot()
16
-
17
- const FastaAdapter = pluginManager.getAdapterType('IndexedFastaAdapter')
18
- const cfg2 = FastaAdapter.configSchema.create({ type: 'IndexedFastaAdapter' })
19
- expect(getSnapshot(cfg2)).toMatchSnapshot()
20
- })
package/src/index.ts DELETED
@@ -1,28 +0,0 @@
1
- import Plugin from '@jbrowse/core/Plugin'
2
- import PluginManager from '@jbrowse/core/PluginManager'
3
-
4
- import TwoBitAdapterF from './TwoBitAdapter'
5
- import DivSequenceRendererF from './DivSequenceRenderer'
6
- import BgzipFastaAdapterF from './BgzipFastaAdapter'
7
- import ChromSizesAdapterF from './ChromSizesAdapter'
8
- import IndexedFastaAdapterF from './IndexedFastaAdapter'
9
- import SequenceSearchAdapterF from './SequenceSearchAdapter'
10
- import ReferenceSequenceTrackF from './ReferenceSequenceTrack'
11
- import LinearReferenceSequenceDisplayF from './LinearReferenceSequenceDisplay'
12
- import createExtensionPoints from './createExtensionPoints'
13
-
14
- export default class SequencePlugin extends Plugin {
15
- name = 'SequencePlugin'
16
-
17
- install(pluginManager: PluginManager) {
18
- DivSequenceRendererF(pluginManager)
19
- TwoBitAdapterF(pluginManager)
20
- BgzipFastaAdapterF(pluginManager)
21
- ChromSizesAdapterF(pluginManager)
22
- IndexedFastaAdapterF(pluginManager)
23
- SequenceSearchAdapterF(pluginManager)
24
- ReferenceSequenceTrackF(pluginManager)
25
- LinearReferenceSequenceDisplayF(pluginManager)
26
- createExtensionPoints(pluginManager)
27
- }
28
- }