thealper2 commited on
Commit
9215e6b
·
verified ·
1 Parent(s): d19be49

Upload folder using huggingface_hub

Browse files
all_results.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 10.0,
3
+ "eval_bleu": 80.14440338125033,
4
+ "eval_exact_match": 0.212,
5
+ "eval_exact_match_pct": 21.2,
6
+ "eval_loss": 0.12204901874065399,
7
+ "eval_num_evaluated": 1000.0,
8
+ "eval_pred_len_mean": 28.06,
9
+ "eval_runtime": 64.095,
10
+ "eval_samples_per_second": 15.602,
11
+ "eval_steps_per_second": 0.25,
12
+ "total_flos": 4.858486798123008e+16,
13
+ "train_loss": 0.22325511785955607,
14
+ "train_runtime": 5103.6189,
15
+ "train_samples_per_second": 91.465,
16
+ "train_steps_per_second": 2.859
17
+ }
config.json ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "T5ForConditionalGeneration"
4
+ ],
5
+ "bos_token_id": 1,
6
+ "classifier_dropout": 0.0,
7
+ "d_ff": 3072,
8
+ "d_kv": 64,
9
+ "d_model": 768,
10
+ "decoder_start_token_id": 0,
11
+ "dense_act_fn": "relu",
12
+ "dropout_rate": 0.1,
13
+ "dtype": "float32",
14
+ "eos_token_id": 2,
15
+ "feed_forward_proj": "relu",
16
+ "gradient_checkpointing": false,
17
+ "id2label": {
18
+ "0": "LABEL_0"
19
+ },
20
+ "initializer_factor": 1.0,
21
+ "is_decoder": false,
22
+ "is_encoder_decoder": true,
23
+ "is_gated_act": false,
24
+ "label2id": {
25
+ "LABEL_0": 0
26
+ },
27
+ "layer_norm_epsilon": 1e-06,
28
+ "model_type": "t5",
29
+ "n_positions": 512,
30
+ "num_decoder_layers": 12,
31
+ "num_heads": 12,
32
+ "num_layers": 12,
33
+ "output_past": true,
34
+ "pad_token_id": 0,
35
+ "relative_attention_max_distance": 128,
36
+ "relative_attention_num_buckets": 32,
37
+ "scale_decoder_outputs": true,
38
+ "task_specific_params": {
39
+ "summarization": {
40
+ "early_stopping": true,
41
+ "length_penalty": 2.0,
42
+ "max_length": 200,
43
+ "min_length": 30,
44
+ "no_repeat_ngram_size": 3,
45
+ "num_beams": 4,
46
+ "prefix": "summarize: "
47
+ },
48
+ "translation_en_to_de": {
49
+ "early_stopping": true,
50
+ "max_length": 300,
51
+ "num_beams": 4,
52
+ "prefix": "translate English to German: "
53
+ },
54
+ "translation_en_to_fr": {
55
+ "early_stopping": true,
56
+ "max_length": 300,
57
+ "num_beams": 4,
58
+ "prefix": "translate English to French: "
59
+ },
60
+ "translation_en_to_ro": {
61
+ "early_stopping": true,
62
+ "max_length": 300,
63
+ "num_beams": 4,
64
+ "prefix": "translate English to Romanian: "
65
+ }
66
+ },
67
+ "tie_word_embeddings": true,
68
+ "transformers_version": "5.17.0",
69
+ "use_cache": false,
70
+ "vocab_size": 32100
71
+ }
dataset_summary.json ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dataset_name": "google/code_x_glue_cc_code_refinement",
3
+ "dataset_config": "small",
4
+ "splits": {
5
+ "train": 46680,
6
+ "validation": 5835,
7
+ "test": 5835
8
+ },
9
+ "source_column": "buggy",
10
+ "target_column": "fixed",
11
+ "detected_language": "java (heuristic, score=1193)",
12
+ "columns": [
13
+ "id",
14
+ "buggy",
15
+ "fixed"
16
+ ],
17
+ "malformed": {
18
+ "train": 0,
19
+ "validation": 0,
20
+ "test": 0
21
+ },
22
+ "identical_pairs": {
23
+ "train": 0,
24
+ "validation": 0,
25
+ "test": 0
26
+ },
27
+ "length_stats": {
28
+ "train/buggy": {
29
+ "mean": 53.388110539845755,
30
+ "p50": 53.0,
31
+ "p95": 82.0,
32
+ "p99": 92.0,
33
+ "max": 132
34
+ },
35
+ "train/fixed": {
36
+ "mean": 48.23601113967438,
37
+ "p50": 47.0,
38
+ "p95": 79.0,
39
+ "p99": 89.0,
40
+ "max": 124
41
+ },
42
+ "validation/buggy": {
43
+ "mean": 53.56966580976864,
44
+ "p50": 53.0,
45
+ "p95": 82.0,
46
+ "p99": 91.65999999999985,
47
+ "max": 119
48
+ },
49
+ "validation/fixed": {
50
+ "mean": 48.40222793487575,
51
+ "p50": 48.0,
52
+ "p95": 79.0,
53
+ "p99": 87.0,
54
+ "max": 111
55
+ },
56
+ "test/buggy": {
57
+ "mean": 53.23547557840617,
58
+ "p50": 53.0,
59
+ "p95": 83.0,
60
+ "p99": 92.0,
61
+ "max": 128
62
+ },
63
+ "test/fixed": {
64
+ "mean": 48.16915167095116,
65
+ "p50": 48.0,
66
+ "p95": 78.0,
67
+ "p99": 88.0,
68
+ "max": 130
69
+ }
70
+ },
71
+ "truncated": {
72
+ "train": {
73
+ "source_truncated": 0,
74
+ "target_truncated": 0,
75
+ "total": 46680
76
+ },
77
+ "validation": {
78
+ "source_truncated": 0,
79
+ "target_truncated": 0,
80
+ "total": 5835
81
+ },
82
+ "test": {
83
+ "source_truncated": 0,
84
+ "target_truncated": 0,
85
+ "total": 5835
86
+ }
87
+ }
88
+ }
eval/metrics_test.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "exact_match": 0.22433590402742073,
3
+ "exact_match_pct": 22.433590402742073,
4
+ "bleu": 80.13394782533952,
5
+ "num_evaluated": 5835.0,
6
+ "pred_len_mean": 27.43050556983719,
7
+ "copy_input_pct": 3.37617823479006,
8
+ "partial_fix_pct": 13.48757497857755,
9
+ "incorrect_pct": 64.07883461868038,
10
+ "eval_loss": 0.12569236884946408
11
+ }
eval/metrics_validation.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "exact_match": 0.212853470437018,
3
+ "exact_match_pct": 21.2853470437018,
4
+ "bleu": 80.2746460915236,
5
+ "num_evaluated": 5835.0,
6
+ "pred_len_mean": 27.832390745501286,
7
+ "copy_input_pct": 2.9648671808054843,
8
+ "partial_fix_pct": 13.50471293916024,
9
+ "incorrect_pct": 65.20994001713797,
10
+ "eval_loss": 0.12715422718421274
11
+ }
eval/predictions_test.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/predictions_validation.jsonl ADDED
The diff for this file is too large to render. See raw diff
 
eval/qualitative_test.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "bucket": "exact",
4
+ "index": "2",
5
+ "buggy": "private void METHOD_1 ( java.lang.Class VAR_1 ) { android.content.Intent intent = new android.content.Intent ( this , VAR_1 ) ; METHOD_2 ( intent ) ; } \n",
6
+ "reference": "public void METHOD_1 ( java.lang.Class VAR_1 ) { android.content.Intent intent = new android.content.Intent ( this , VAR_1 ) ; METHOD_2 ( intent ) ; }",
7
+ "prediction": "public void METHOD_1 ( java.lang.Class VAR_1 ) { android.content.Intent intent = new android.content.Intent ( this , VAR_1 ) ; METHOD_2 ( intent ) ; }"
8
+ },
9
+ {
10
+ "bucket": "exact",
11
+ "index": "6",
12
+ "buggy": "private static boolean METHOD_1 ( final byte status ) { return status == ( VAR_1 ) ; } \n",
13
+ "reference": "private static boolean METHOD_1 ( final int status ) { return status == ( VAR_1 ) ; }",
14
+ "prediction": "private static boolean METHOD_1 ( final int status ) { return status == ( VAR_1 ) ; }"
15
+ },
16
+ {
17
+ "bucket": "partial",
18
+ "index": "3",
19
+ "buggy": "public void METHOD_1 ( ) { for ( TYPE_1 VAR_1 : VAR_2 ) VAR_1 . METHOD_2 ( ) ; METHOD_3 ( ) ; if ( ( VAR_3 ) != null ) VAR_3 . METHOD_1 ( ) ; } \n",
20
+ "reference": "public void METHOD_1 ( ) { METHOD_3 ( ) ; if ( ( VAR_3 ) != null ) VAR_3 . METHOD_1 ( VAR_2 ) ; }",
21
+ "prediction": "public void METHOD_1 ( ) { METHOD_3 ( ) ; if ( ( VAR_3 ) != null ) VAR_3 . METHOD_1 ( ) ; }"
22
+ },
23
+ {
24
+ "bucket": "partial",
25
+ "index": "9",
26
+ "buggy": "public void METHOD_1 ( final java.lang.String ... VAR_1 ) { if ( VAR_1 != null ) format . METHOD_2 ( ) . METHOD_3 ( VAR_2 , VAR_1 ) ; } \n",
27
+ "reference": "public void METHOD_1 ( final java.lang.String ... VAR_1 ) { if ( ( VAR_1 != null ) && ( 0 < ( VAR_1 . length ) ) ) format . METHOD_2 ( ) . METHOD_3 ( VAR_2 , VAR_1 ) ; }",
28
+ "prediction": "public void METHOD_1 ( final java.lang.String ... VAR_1 ) { if ( ( VAR_1 != null ) && ( ( format . METHOD_2 ( ) ) != null ) ) format . METHOD_2 ( ) . METHOD_3 ( VAR_2 , VAR_1 ) ; }"
29
+ },
30
+ {
31
+ "bucket": "incorrect",
32
+ "index": "0",
33
+ "buggy": "private TYPE_1 getType ( TYPE_2 VAR_1 ) { TYPE_3 VAR_2 = new TYPE_3 ( STRING_1 ) ; return new TYPE_1 ( VAR_2 , VAR_2 ) ; } \n",
34
+ "reference": "private TYPE_1 getType ( TYPE_2 VAR_1 ) { TYPE_3 VAR_2 = new TYPE_3 ( STRING_1 ) ; return new TYPE_1 ( VAR_2 , VAR_2 , this , VAR_1 ) ; }",
35
+ "prediction": "private TYPE_1 getType ( TYPE_2 VAR_1 ) { TYPE_3 VAR_2 = new TYPE_3 ( STRING_1 ) ; return new TYPE_1 ( VAR_2 , VAR_1 ) ; }"
36
+ },
37
+ {
38
+ "bucket": "incorrect",
39
+ "index": "1",
40
+ "buggy": "public TYPE_1 METHOD_1 ( ) { TYPE_1 output = VAR_1 [ VAR_2 ] ; if ( ( VAR_2 ) > 0 ) { VAR_2 = ( VAR_2 ) - 1 ; } else { } return output ; } \n",
41
+ "reference": "public TYPE_1 METHOD_1 ( ) { TYPE_1 output = VAR_1 [ VAR_2 ] ; if ( ( VAR_2 ) >= 0 ) { VAR_2 = ( VAR_2 ) - 1 ; } else { } return output ; }",
42
+ "prediction": "public TYPE_1 METHOD_1 ( ) { TYPE_1 output = VAR_1 [ VAR_2 ] ; if ( ( VAR_2 ) > 0 ) { VAR_2 = ( VAR_2 ) - 1 ; } return output ; }"
43
+ }
44
+ ]
eval/qualitative_validation.json ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "bucket": "exact",
4
+ "index": "15",
5
+ "buggy": "public static TYPE_1 METHOD_1 ( final TYPE_2 VAR_1 , final java.lang.Object msg ) { TYPE_3 VAR_2 = TYPE_4 . METHOD_2 ( VAR_1 ) ; return TYPE_5 . METHOD_1 ( VAR_2 , msg ) ; } \n",
6
+ "reference": "public static TYPE_1 METHOD_1 ( final TYPE_2 VAR_1 , final java.lang.Object msg ) { TYPE_3 VAR_2 = TYPE_4 . METHOD_2 ( VAR_1 ) ; return TYPE_5 . METHOD_1 ( VAR_2 , msg , null ) ; }",
7
+ "prediction": "public static TYPE_1 METHOD_1 ( final TYPE_2 VAR_1 , final java.lang.Object msg ) { TYPE_3 VAR_2 = TYPE_4 . METHOD_2 ( VAR_1 ) ; return TYPE_5 . METHOD_1 ( VAR_2 , msg , null ) ; }"
8
+ },
9
+ {
10
+ "bucket": "exact",
11
+ "index": "23",
12
+ "buggy": "public void METHOD_1 ( ) { TYPE_1 . METHOD_2 ( VAR_1 , STRING_1 ) ; METHOD_3 ( false ) ; METHOD_4 ( ) ; super . METHOD_1 ( ) ; } \n",
13
+ "reference": "public void METHOD_1 ( ) { TYPE_1 . METHOD_2 ( VAR_1 , STRING_1 ) ; METHOD_4 ( ) ; super . METHOD_1 ( ) ; }",
14
+ "prediction": "public void METHOD_1 ( ) { TYPE_1 . METHOD_2 ( VAR_1 , STRING_1 ) ; METHOD_4 ( ) ; super . METHOD_1 ( ) ; }"
15
+ },
16
+ {
17
+ "bucket": "partial",
18
+ "index": "0",
19
+ "buggy": "public java.util.List < TYPE_1 > METHOD_1 ( ) { java.util.ArrayList < TYPE_1 > VAR_1 = new java.util.ArrayList < TYPE_1 > ( ) ; for ( TYPE_2 VAR_2 : VAR_3 ) { VAR_1 . METHOD_2 ( VAR_2 . METHOD_1 ( ) ) ; } return VAR_1 ; } \n",
20
+ "reference": "public java.util.List < TYPE_1 > METHOD_1 ( ) { return VAR_1 ; }",
21
+ "prediction": "public java.util.List < TYPE_1 > METHOD_1 ( ) { return VAR_3 ; }"
22
+ },
23
+ {
24
+ "bucket": "partial",
25
+ "index": "2",
26
+ "buggy": "public static void main ( java.lang.String [ ] args ) throws java.lang.Exception { TYPE_1 VAR_1 = new TYPE_1 ( ) ; VAR_1 . METHOD_1 ( ) ; VAR_1 . add ( VAR_2 ) ; VAR_1 . METHOD_2 ( true ) ; VAR_1 . init ( STRING_1 ) ; } \n",
27
+ "reference": "public static void main ( java.lang.String [ ] args ) throws java.lang.Exception { TYPE_1 VAR_1 = new TYPE_1 ( ) ; VAR_1 . METHOD_1 ( ) ; VAR_1 . METHOD_2 ( true ) ; VAR_1 . init ( STRING_1 ) ; }",
28
+ "prediction": "public static void main ( java.lang.String [ ] args ) throws java.lang.Exception { TYPE_1 VAR_1 = new TYPE_1 ( ) ; VAR_1 . METHOD_1 ( ) ; VAR_1 . add ( VAR_2 ) ; VAR_1 . init ( STRING_1 ) ; }"
29
+ },
30
+ {
31
+ "bucket": "incorrect",
32
+ "index": "1",
33
+ "buggy": "public TYPE_1 < TYPE_2 > METHOD_1 ( TYPE_3 VAR_1 , java.lang.String VAR_2 ) { return METHOD_1 ( VAR_1 . toString ( ) , VAR_2 ) ; } \n",
34
+ "reference": "public TYPE_1 < TYPE_2 > METHOD_1 ( TYPE_3 VAR_1 , java.lang.String VAR_2 , java.util.HashMap < java.lang.String , java.lang.String > parameters ) { return METHOD_1 ( VAR_1 . toString ( ) , VAR_2 , parameters ) ; }",
35
+ "prediction": "public TYPE_1 < TYPE_2 > METHOD_1 ( TYPE_3 VAR_1 , java.lang.String VAR_2 ) { return METHOD_1 ( VAR_1 , VAR_2 , null ) ; }"
36
+ },
37
+ {
38
+ "bucket": "incorrect",
39
+ "index": "3",
40
+ "buggy": "public void METHOD_1 ( int VAR_1 , java.lang.String VAR_2 , long VAR_3 ) { if ( VAR_1 == 0 ) { VAR_4 . METHOD_2 ( java.lang.String . METHOD_3 ( VAR_3 ) ) ; } else { VAR_4 . error ( VAR_2 ) ; } } \n",
41
+ "reference": "public void METHOD_1 ( int VAR_1 , java.lang.String VAR_2 , long VAR_3 ) { if ( VAR_1 == 0 ) { VAR_4 . METHOD_2 ( java.lang.String . METHOD_3 ( VAR_3 ) ) ; } else { VAR_4 . error ( VAR_1 ) ; } }",
42
+ "prediction": "public void METHOD_1 ( int VAR_1 , java.lang.String VAR_2 , long VAR_3 ) { if ( VAR_1 == 0 ) { VAR_4 . METHOD_2 ( java.lang.String . METHOD_3 ( VAR_3 ) ) ; } }"
43
+ }
44
+ ]
eval_results.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 10.0,
3
+ "eval_bleu": 80.14440338125033,
4
+ "eval_exact_match": 0.212,
5
+ "eval_exact_match_pct": 21.2,
6
+ "eval_loss": 0.12204901874065399,
7
+ "eval_num_evaluated": 1000.0,
8
+ "eval_pred_len_mean": 28.06,
9
+ "eval_runtime": 64.095,
10
+ "eval_samples_per_second": 15.602,
11
+ "eval_steps_per_second": 0.25
12
+ }
generation_config.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "bos_token_id": 1,
4
+ "decoder_start_token_id": 0,
5
+ "do_sample": false,
6
+ "early_stopping": true,
7
+ "eos_token_id": 2,
8
+ "length_penalty": 1.0,
9
+ "max_length": 256,
10
+ "max_new_tokens": 256,
11
+ "num_beams": 4,
12
+ "output_attentions": false,
13
+ "output_hidden_states": false,
14
+ "pad_token_id": 0,
15
+ "transformers_version": "5.17.0",
16
+ "use_cache": true
17
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ba0dbe4604ded324127c608bd4e8aff3ceb32af60fa11a4765e9f00e82c553e7
3
+ size 891558696
run_config.json ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model_name": "Salesforce/codet5-base",
3
+ "dataset_name": "google/code_x_glue_cc_code_refinement",
4
+ "dataset_config": "small",
5
+ "source_column": null,
6
+ "target_column": null,
7
+ "language": "java",
8
+ "train_split": "train",
9
+ "eval_split": "validation",
10
+ "test_split": "test",
11
+ "max_source_length": 256,
12
+ "max_target_length": 256,
13
+ "pad_to_multiple_of": 8,
14
+ "learning_rate": 5e-05,
15
+ "per_device_train_batch_size": 16,
16
+ "per_device_eval_batch_size": 64,
17
+ "gradient_accumulation_steps": 2,
18
+ "num_train_epochs": 10.0,
19
+ "weight_decay": 0.01,
20
+ "warmup_ratio": 0.05,
21
+ "lr_scheduler_type": "linear",
22
+ "max_grad_norm": 1.0,
23
+ "label_smoothing_factor": 0.0,
24
+ "gradient_checkpointing": false,
25
+ "eval_strategy": "epoch",
26
+ "save_strategy": "epoch",
27
+ "logging_steps": 100,
28
+ "save_total_limit": 2,
29
+ "load_best_model_at_end": true,
30
+ "metric_for_best_model": "exact_match",
31
+ "greater_is_better": true,
32
+ "early_stopping_patience": 3,
33
+ "eval_subset_size": 1000,
34
+ "max_eval_examples": 0,
35
+ "num_beams": 4,
36
+ "max_new_tokens": 256,
37
+ "generation_early_stopping": true,
38
+ "length_penalty": 1.0,
39
+ "no_repeat_ngram_size": 0,
40
+ "seed": 42,
41
+ "output_dir": "outputs/codet5-base-code-repair",
42
+ "precision": "auto",
43
+ "dataloader_num_workers": 4,
44
+ "report_to": "none",
45
+ "resume_from_checkpoint": null,
46
+ "compute_codebleu": true,
47
+ "smoke_test": false,
48
+ "smoke_train_size": 256,
49
+ "smoke_eval_size": 32,
50
+ "smoke_epochs": 1.0
51
+ }
tokenizer.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "backend": "tokenizers",
4
+ "bos_token": "<s>",
5
+ "cls_token": "<s>",
6
+ "eos_token": "</s>",
7
+ "errors": "replace",
8
+ "is_local": false,
9
+ "local_files_only": false,
10
+ "mask_token": "<mask>",
11
+ "model_max_length": 512,
12
+ "pad_token": "<pad>",
13
+ "sep_token": "</s>",
14
+ "tokenizer_class": "RobertaTokenizer",
15
+ "trim_offsets": true,
16
+ "unk_token": "<unk>"
17
+ }
train_results.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "epoch": 10.0,
3
+ "total_flos": 4.858486798123008e+16,
4
+ "train_loss": 0.22325511785955607,
5
+ "train_runtime": 5103.6189,
6
+ "train_samples_per_second": 91.465,
7
+ "train_steps_per_second": 2.859
8
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b21c5d4e30108428603fa9c4b5c15ba7bde35035f2f7c01b9d2ed30b839d952b
3
+ size 7313