Skip to content

Commit

Permalink
work on compatible with ts 2.7
Browse files Browse the repository at this point in the history
  • Loading branch information
sgratzl committed Mar 13, 2019
1 parent de7fb5d commit 217bd4d
Show file tree
Hide file tree
Showing 48 changed files with 190 additions and 180 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,6 @@
src/**/*.js
src/**/*.css
src/**/*.d.ts
/node_modules/
node_modules
.cache-loader
/build*
6 changes: 5 additions & 1 deletion src/internal/interable.ts
Original file line number Diff line number Diff line change
Expand Up @@ -356,10 +356,14 @@ abstract class ALazyMap<T, T2> implements ISequence<T2> {
}

class LazyMap1<T1, T2> extends ALazyMap<T1, T2> implements ISequence<T2> {
constructor(it: ISequenceBase<T1>, protected readonly mapV: (v: T1, i: number) => T2) {
constructor(it: ISequenceBase<T1>, protected readonly map12: (v: T1, i: number) => T2) {
super(it);
}

protected mapV(v: T1, i: number) {
return this.map12(v, i);
}

map<U>(callback: (v: T2, i: number) => U): ISequence<U> {
return new LazyMap2(this.it, this.mapV, callback);
}
Expand Down
12 changes: 6 additions & 6 deletions src/internal/math.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export function min<T>(values: T[], acc: (v: T) => number): number;
export function min<T>(values: T[], acc?: (v: T) => number) {
let min = Number.POSITIVE_INFINITY;
for (const d of values) {
const v = acc ? acc(d) : <number><unknown>d;
const v = acc ? acc(d) : <number><any>d;
if (v < min) {
min = v;
}
Expand All @@ -42,7 +42,7 @@ export function max<T>(values: T[], acc: (v: T) => number): number;
export function max<T>(values: T[], acc?: (v: T) => number) {
let max = Number.NEGATIVE_INFINITY;
for (const d of values) {
const v = acc ? acc(d) : <number><unknown>d;
const v = acc ? acc(d) : <number><any>d;
if (v > max) {
max = v;
}
Expand All @@ -59,7 +59,7 @@ export function extent<T>(values: T[], acc?: (v: T) => number) {
let max = Number.NEGATIVE_INFINITY;
let min = Number.POSITIVE_INFINITY;
for (const d of values) {
const v = acc ? acc(d) : <number><unknown>d;
const v = acc ? acc(d) : <number><any>d;
if (v < min) {
min = v;
}
Expand Down Expand Up @@ -115,7 +115,7 @@ export function quantile(values: ArrayLike<number>, quantile: number, length = v
export function median(values: number[]): number;
export function median<T>(values: T[], acc: (v: T) => number): number;
export function median<T>(values: T[], acc?: (v: T) => number) {
const arr = acc ? values.map(acc) : (<number[]><unknown>values).slice();
const arr = acc ? values.map(acc) : (<number[]><any>values).slice();
arr.sort((a, b) => (a < b ? -1 : (a > b ? 1 : 0)));
return quantile(arr, 0.5);
}
Expand Down Expand Up @@ -950,7 +950,7 @@ export function categoricalValueCache2Value<T extends {name: string}>(v: number,


function sortWorkerMain() {
const wself = <IPoorManWorkerScope><unknown>self;
const wself = <IPoorManWorkerScope><any>self;

// stored refs to avoid duplicate copy
const refs = new Map<string, UIntTypedArray | Float32Array | Int32Array | Float64Array>();
Expand Down Expand Up @@ -993,7 +993,7 @@ function sortWorkerMain() {
const resolveRefs = <T extends UIntTypedArray | Float32Array | Int32Array>(r: IStatsWorkerMessage) => {
// resolve refs or save the new data

const data: T = r.data ? <T><unknown>r.data : <T><unknown>refs.get(r.refData)!;
const data: T = r.data ? <T><any>r.data : <T><any>refs.get(r.refData)!;
const indices = r.indices ? r.indices : (r.refIndices ? <UIntTypedArray>refs.get(r.refIndices)! : undefined);
if (r.refData) {
refs.set(r.refData, data);
Expand Down
4 changes: 3 additions & 1 deletion src/internal/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@ export interface IPoorManWorkerScopeEventMap {
error: ErrorEvent;
}

declare type IPoorManTansferAble = ArrayBuffer | MessagePort | ImageBitmap;

/**
* @internal
*/
export interface IPoorManWorkerScope {
onmessage: ((this: IPoorManWorkerScope, ev: MessageEvent) => any) | null;
onerror: ((this: IPoorManWorkerScope, ev: ErrorEvent) => any) | null;
close(): void;
postMessage(message: any, transfer?: Transferable[]): void;
postMessage(message: any, transfer?: IPoorManTansferAble[]): void;
addEventListener<K extends keyof IPoorManWorkerScopeEventMap>(type: K, listener: (this: IPoorManWorkerScope, ev: IPoorManWorkerScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
removeEventListener<K extends keyof IPoorManWorkerScopeEventMap>(type: K, listener: (this: IPoorManWorkerScope, ev: IPoorManWorkerScopeEventMap[K]) => any, options?: boolean | AddEventListenerOptions): void;
}
Expand Down
2 changes: 1 addition & 1 deletion src/model/AggregateGroupColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ export interface IAggregateGroupColumnDesc extends IColumnDesc {
* @asMemberOf AggregateGroupColumn
* @event
*/
declare function aggregate(ranking: Ranking, group: IGroup, value: boolean, state: EAggregationState): void;
export declare function aggregate(ranking: Ranking, group: IGroup, value: boolean, state: EAggregationState): void;

/**
* a checkbox column for selections
Expand Down
10 changes: 5 additions & 5 deletions src/model/AnnotateColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,22 @@ import ValueColumn, {dataLoaded} from './ValueColumn';
* @asMemberOf AnnotateColumn
* @event
*/
declare function filterChanged(previous: string | RegExp | null, current: string | RegExp | null): void;
export declare function filterChanged_AC(previous: string | RegExp | null, current: string | RegExp | null): void;


/**
* emitted when the grouping property changes
* @asMemberOf AnnotateColumn
* @event
*/
declare function groupingChanged(previous: (RegExp | string)[][], current: (RegExp | string)[][]): void;
export declare function groupingChanged_AC(previous: (RegExp | string)[][], current: (RegExp | string)[][]): void;

/**
* emitted when the value of a row changes
* @asMemberOf AnnotateColumn
* @event
*/
declare function valueChanged(dataIndex: number, previous: string, current: string): void;
export declare function valueChanged(dataIndex: number, previous: string, current: string): void;

/**
* a string column in which the values can be edited locally
Expand All @@ -40,8 +40,8 @@ export default class AnnotateColumn extends StringColumn {
}

on(type: typeof AnnotateColumn.EVENT_VALUE_CHANGED, listener: typeof valueChanged | null): this;
on(type: typeof StringColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged | null): this;
on(type: typeof StringColumn.EVENT_GROUPING_CHANGED, listener: typeof groupingChanged | null): this;
on(type: typeof StringColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged_AC | null): this;
on(type: typeof StringColumn.EVENT_GROUPING_CHANGED, listener: typeof groupingChanged_AC | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down
10 changes: 5 additions & 5 deletions src/model/BooleanColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ export declare type IBooleanColumnDesc = IValueColumnDesc<boolean> & IBooleanDes
* @asMemberOf BooleanColumn
* @event
*/
declare function colorMappingChanged(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;
export declare function colorMappingChanged_BC(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;

/**
* emitted when the filter property changes
* @asMemberOf BooleanColumn
* @event
*/
declare function filterChanged(previous: boolean | null, current: boolean | null): void;
export declare function filterChanged_BC(previous: boolean | null, current: boolean | null): void;

/**
* a string column with optional alignment
Expand Down Expand Up @@ -77,8 +77,8 @@ export default class BooleanColumn extends ValueColumn<boolean> implements ICate
return super.createEventList().concat([BooleanColumn.EVENT_COLOR_MAPPING_CHANGED, BooleanColumn.EVENT_FILTER_CHANGED]);
}

on(type: typeof BooleanColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged | null): this;
on(type: typeof BooleanColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged | null): this;
on(type: typeof BooleanColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged_BC | null): this;
on(type: typeof BooleanColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_BC | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down Expand Up @@ -222,7 +222,7 @@ export default class BooleanColumn extends ValueColumn<boolean> implements ICate
return v ? 1 : 0;
}

toCompareValueType() {
toCompareValueType(): ECompareValueType {
return ECompareValueType.BINARY;
}

Expand Down
8 changes: 4 additions & 4 deletions src/model/BooleansColumn.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import ArrayColumn, {IArrayColumnDesc} from './ArrayColumn';
import {ISetColumn, ICategoricalColorMappingFunction} from './ICategoricalColumn';
import {IDataRow, DEFAULT_COLOR} from './interfaces';
import {IDataRow, DEFAULT_COLOR, ECompareValueType} from './interfaces';
import CategoricalColumn from './CategoricalColumn';
import {DEFAULT_CATEGORICAL_COLOR_FUNCTION, restoreCategoricalColorMapping} from './CategoricalColorMappingFunction';
import ValueColumn, {dataLoaded} from './ValueColumn';
Expand All @@ -17,7 +17,7 @@ export declare type IBooleansColumnDesc = IArrayColumnDesc<boolean>;
* @asMemberOf BooleansColumn
* @event
*/
declare function colorMappingChanged(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;
export declare function colorMappingChanged_BCS(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;


export default class BooleansColumn extends ArrayColumn<boolean> implements ISetColumn {
Expand Down Expand Up @@ -48,7 +48,7 @@ export default class BooleansColumn extends ArrayColumn<boolean> implements ISet
return v.reduce((a, b) => a + (b ? 1 : 0), 0);
}

toCompareValueType() {
toCompareValueType(): ECompareValueType {
return chooseUIntByDataLength(this.dataLength);
}

Expand All @@ -72,7 +72,7 @@ export default class BooleansColumn extends ArrayColumn<boolean> implements ISet
return super.createEventList().concat([BooleansColumn.EVENT_COLOR_MAPPING_CHANGED]);
}

on(type: typeof BooleansColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged | null): this;
on(type: typeof BooleansColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_BCS | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down
16 changes: 8 additions & 8 deletions src/model/BoxPlotColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,28 @@ export declare type IBoxPlotColumnDesc = IBoxPlotDesc & IValueColumnDesc<IBoxPlo
* @asMemberOf BoxPlotColumn
* @event
*/
declare function sortMethodChanged(previous: ESortMethod, current: ESortMethod): void;
export declare function sortMethodChanged_BPC(previous: ESortMethod, current: ESortMethod): void;

/**
* emitted when the mapping property changes
* @asMemberOf BoxPlotColumn
* @event
*/
declare function mappingChanged(previous: IMappingFunction, current: IMappingFunction): void;
export declare function mappingChanged_BPC(previous: IMappingFunction, current: IMappingFunction): void;

/**
* emitted when the color mapping property changes
* @asMemberOf BoxPlotColumn
* @event
*/
declare function colorMappingChanged(previous: IColorMappingFunction, current: IColorMappingFunction): void;
export declare function colorMappingChanged_BPC(previous: IColorMappingFunction, current: IColorMappingFunction): void;

/**
* emitted when the filter property changes
* @asMemberOf BoxPlotColumn
* @event
*/
declare function filterChanged(previous: INumberFilter | null, current: INumberFilter | null): void;
export declare function filterChanged_BPC(previous: INumberFilter | null, current: INumberFilter | null): void;


@toolbar('filterNumber', 'colorMapped', 'editMapping')
Expand Down Expand Up @@ -219,10 +219,10 @@ export default class BoxPlotColumn extends ValueColumn<IBoxPlotData> implements
return super.createEventList().concat([BoxPlotColumn.EVENT_SORTMETHOD_CHANGED, BoxPlotColumn.EVENT_COLOR_MAPPING_CHANGED, BoxPlotColumn.EVENT_MAPPING_CHANGED, BoxPlotColumn.EVENT_FILTER_CHANGED]);
}

on(type: typeof BoxPlotColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged | null): this;
on(type: typeof BoxPlotColumn.EVENT_MAPPING_CHANGED, listener: typeof mappingChanged | null): this;
on(type: typeof BoxPlotColumn.EVENT_SORTMETHOD_CHANGED, listener: typeof sortMethodChanged | null): this;
on(type: typeof BoxPlotColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged | null): this;
on(type: typeof BoxPlotColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_BPC | null): this;
on(type: typeof BoxPlotColumn.EVENT_MAPPING_CHANGED, listener: typeof mappingChanged_BPC | null): this;
on(type: typeof BoxPlotColumn.EVENT_SORTMETHOD_CHANGED, listener: typeof sortMethodChanged_BPC | null): this;
on(type: typeof BoxPlotColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged_BPC | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down
12 changes: 6 additions & 6 deletions src/model/CategoricalColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import {Category, toolbar} from './annotations';
import {DEFAULT_CATEGORICAL_COLOR_FUNCTION, restoreCategoricalColorMapping} from './CategoricalColorMappingFunction';
import Column, {dirty, dirtyCaches, dirtyHeader, dirtyValues, groupRendererChanged, labelChanged, metaDataChanged, rendererTypeChanged, summaryRendererChanged, visibilityChanged, widthChanged} from './Column';
import {ICategoricalColumn, ICategoricalColumnDesc, ICategoricalFilter, ICategory, ICategoricalColorMappingFunction} from './ICategoricalColumn';
import {IDataRow, IGroup, ICompareValue, DEFAULT_COLOR} from './interfaces';
import {IDataRow, IGroup, ICompareValue, DEFAULT_COLOR, ECompareValueType} from './interfaces';
import {missingGroup} from './missing';
import ValueColumn, {dataLoaded} from './ValueColumn';
import {toCategories, isCategoryIncluded, isEqualCategoricalFilter, toCompareCategoryValue, COMPARE_CATEGORY_VALUE_TYPES, toGroupCompareCategoryValue, COMPARE_GROUP_CATEGORY_VALUE_TYPES} from './internalCategorical';
Expand All @@ -14,15 +14,15 @@ import {toCategories, isCategoryIncluded, isEqualCategoricalFilter, toCompareCat
* @asMemberOf CategoricalColumn
* @event
*/
declare function colorMappingChanged(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;
export declare function colorMappingChanged_CC(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;


/**
* emitted when the filter property changes
* @asMemberOf CategoricalColumn
* @event
*/
declare function filterChanged(previous: ICategoricalFilter | null, current: ICategoricalFilter | null): void;
export declare function filterChanged_CC(previous: ICategoricalFilter | null, current: ICategoricalFilter | null): void;

/**
* column for categorical values
Expand Down Expand Up @@ -56,8 +56,8 @@ export default class CategoricalColumn extends ValueColumn<string> implements IC
return super.createEventList().concat([CategoricalColumn.EVENT_FILTER_CHANGED, CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED]);
}

on(type: typeof CategoricalColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged | null): this;
on(type: typeof CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged | null): this;
on(type: typeof CategoricalColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged_CC | null): this;
on(type: typeof CategoricalColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_CC | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down Expand Up @@ -208,7 +208,7 @@ export default class CategoricalColumn extends ValueColumn<string> implements IC
return toCompareCategoryValue(valueCache !== undefined ? valueCache : this.getCategory(row));
}

toCompareValueType() {
toCompareValueType(): ECompareValueType {
return COMPARE_CATEGORY_VALUE_TYPES;
}

Expand Down
4 changes: 2 additions & 2 deletions src/model/CategoricalMapColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ export declare type ICategoricalMapColumnDesc = ICategoricalDesc & IMapColumnDes
* @asMemberOf CategoricalMapColumn
* @event
*/
declare function colorMappingChanged(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;
export declare function colorMappingChanged_CMC(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;

@toolbar('colorMappedCategorical')
export default class CategoricalMapColumn extends MapColumn<string | null> implements ICategoricalLikeColumn {
Expand All @@ -39,7 +39,7 @@ export default class CategoricalMapColumn extends MapColumn<string | null> imple
return super.createEventList().concat([CategoricalMapColumn.EVENT_COLOR_MAPPING_CHANGED]);
}

on(type: typeof CategoricalMapColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged | null): this;
on(type: typeof CategoricalMapColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_CMC | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down
4 changes: 2 additions & 2 deletions src/model/CategoricalsColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export declare type ICategoricalsColumnDesc = ICategoricalDesc & IArrayColumnDes
* @asMemberOf CategoricalsColumn
* @event
*/
declare function colorMappingChanged(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;
export declare function colorMappingChanged_CCS(previous: ICategoricalColorMappingFunction, current: ICategoricalColorMappingFunction): void;

/**
* a string column with optional alignment
Expand All @@ -42,7 +42,7 @@ export default class CategoricalsColumn extends ArrayColumn<string | null> imple
return super.createEventList().concat([CategoricalsColumn.EVENT_COLOR_MAPPING_CHANGED]);
}

on(type: typeof CategoricalsColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged | null): this;
on(type: typeof CategoricalsColumn.EVENT_COLOR_MAPPING_CHANGED, listener: typeof colorMappingChanged_CCS | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down
8 changes: 4 additions & 4 deletions src/model/DateColumn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,14 @@ export declare type IDateColumnDesc = IValueColumnDesc<Date> & IDateDesc;
* @asMemberOf DateColumn
* @event
*/
declare function filterChanged(previous: IDateFilter | null, current: IDateFilter | null): void;
export declare function filterChanged_DC(previous: IDateFilter | null, current: IDateFilter | null): void;

/**
* emitted when the grouping property changes
* @asMemberOf DateColumn
* @event
*/
declare function groupingChanged(previous: IDateGrouper | null, current: IDateGrouper | null): void;
export declare function groupingChanged_DC(previous: IDateGrouper | null, current: IDateGrouper | null): void;


@toolbar('groupBy', 'sortGroupBy', 'filterDate')
Expand Down Expand Up @@ -73,8 +73,8 @@ export default class DateColumn extends ValueColumn<Date> implements IDateColumn
return super.createEventList().concat([DateColumn.EVENT_FILTER_CHANGED, DateColumn.EVENT_GROUPING_CHANGED]);
}

on(type: typeof DateColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged | null): this;
on(type: typeof DateColumn.EVENT_GROUPING_CHANGED, listener: typeof groupingChanged | null): this;
on(type: typeof DateColumn.EVENT_FILTER_CHANGED, listener: typeof filterChanged_DC | null): this;
on(type: typeof DateColumn.EVENT_GROUPING_CHANGED, listener: typeof groupingChanged_DC | null): this;
on(type: typeof ValueColumn.EVENT_DATA_LOADED, listener: typeof dataLoaded | null): this;
on(type: typeof Column.EVENT_WIDTH_CHANGED, listener: typeof widthChanged | null): this;
on(type: typeof Column.EVENT_LABEL_CHANGED, listener: typeof labelChanged | null): this;
Expand Down
Loading

0 comments on commit 217bd4d

Please sign in to comment.