erlang_rb 2.0.2 → 2.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data/README.markdown +4 -4
- data/lib/erlang.rb +89 -67
- data/tests/erlang_tests.rb +18 -10
- data.tar.gz.sig +0 -0
- metadata +25 -25
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82fd795948db72df73625ab7cef0f407018800b88d25e99a9a9a7a09d7ffbe8b
|
4
|
+
data.tar.gz: 1a049d6f1d488f86ef89450c5d258d389d25de4c7bdfb8bf7eb66802e36728fd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c843ced9e5875d4439495a8fb9b193f2ea4672cfc86a682c4da2b23c6079d72920c607da8cc8c2afcc0b935da683f2ec2dc5fcfc5c2d30d03744c742dd084de5
|
7
|
+
data.tar.gz: 3497c55537d5a02e8aca60c3d54e733721370e011775f3425240aed59739b112a31551cf54a23cb31cd2a541b53ea505e15cd839c82fba7da6bbdf5f0229ad06
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/README.markdown
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
-
Erlang
|
2
|
-
|
1
|
+
Erlang External Term Format for Ruby
|
2
|
+
====================================
|
3
3
|
|
4
|
-
[![Build Status](https://secure.travis-ci.org/okeuday/erlang_rb.png?branch=master)](http://travis-ci.org/okeuday/erlang_rb)
|
5
4
|
|
6
|
-
|
5
|
+
|
6
|
+
Provides all encoding and decoding for the Erlang External Term Format
|
7
7
|
(as defined at [http://erlang.org/doc/apps/erts/erl_ext_dist.html](http://erlang.org/doc/apps/erts/erl_ext_dist.html))
|
8
8
|
in a single Ruby module.
|
9
9
|
|
data/lib/erlang.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
#
|
4
4
|
# MIT License
|
5
5
|
#
|
6
|
-
# Copyright (c) 2011-
|
6
|
+
# Copyright (c) 2011-2022 Michael Truog <mjtruog at protonmail dot com>
|
7
7
|
#
|
8
8
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
9
9
|
# copy of this software and associated documentation files (the "Software"),
|
@@ -25,11 +25,14 @@
|
|
25
25
|
#
|
26
26
|
|
27
27
|
require 'zlib'
|
28
|
+
require 'set'
|
28
29
|
|
29
30
|
# Erlang term classes listed alphabetically
|
30
31
|
|
31
32
|
module Erlang
|
32
33
|
|
34
|
+
@@UNDEFINED = 'undefined' # Change with set_undefined
|
35
|
+
|
33
36
|
class OtpErlangAtom
|
34
37
|
def initialize(value)
|
35
38
|
@value = value
|
@@ -52,6 +55,8 @@ module Erlang
|
|
52
55
|
raise OutputException, 'uint16 overflow', caller
|
53
56
|
end
|
54
57
|
else
|
58
|
+
# deprecated
|
59
|
+
# (not used in Erlang/OTP 26, i.e., minor_version 2)
|
55
60
|
if length <= 255
|
56
61
|
return "#{TAG_SMALL_ATOM_EXT.chr}#{length.chr}#{@value}"
|
57
62
|
elsif length <= 65535
|
@@ -76,7 +81,7 @@ module Erlang
|
|
76
81
|
end
|
77
82
|
alias eql? ==
|
78
83
|
end
|
79
|
-
|
84
|
+
|
80
85
|
class OtpErlangBinary
|
81
86
|
def initialize(value, bits = 8)
|
82
87
|
@value = value
|
@@ -112,7 +117,7 @@ module Erlang
|
|
112
117
|
end
|
113
118
|
alias eql? ==
|
114
119
|
end
|
115
|
-
|
120
|
+
|
116
121
|
class OtpErlangFunction
|
117
122
|
def initialize(tag, value)
|
118
123
|
@tag = tag
|
@@ -134,7 +139,7 @@ module Erlang
|
|
134
139
|
end
|
135
140
|
alias eql? ==
|
136
141
|
end
|
137
|
-
|
142
|
+
|
138
143
|
class OtpErlangList
|
139
144
|
def initialize(value, improper = false)
|
140
145
|
@value = value
|
@@ -216,7 +221,7 @@ module Erlang
|
|
216
221
|
end
|
217
222
|
alias eql? ==
|
218
223
|
end
|
219
|
-
|
224
|
+
|
220
225
|
class OtpErlangPort
|
221
226
|
def initialize(node, id, creation)
|
222
227
|
@node = node
|
@@ -250,7 +255,7 @@ module Erlang
|
|
250
255
|
end
|
251
256
|
alias eql? ==
|
252
257
|
end
|
253
|
-
|
258
|
+
|
254
259
|
class OtpErlangReference
|
255
260
|
def initialize(node, id, creation)
|
256
261
|
@node = node
|
@@ -295,7 +300,7 @@ module Erlang
|
|
295
300
|
end
|
296
301
|
|
297
302
|
# core functionality
|
298
|
-
|
303
|
+
|
299
304
|
def self.binary_to_term(data)
|
300
305
|
size = data.bytesize
|
301
306
|
if size <= 1
|
@@ -318,7 +323,7 @@ module Erlang
|
|
318
323
|
raise ParseException, 'missing data', e.backtrace
|
319
324
|
end
|
320
325
|
end
|
321
|
-
|
326
|
+
|
322
327
|
def self.term_to_binary(term, compressed = false)
|
323
328
|
data_uncompressed = term_to_binary_(term)
|
324
329
|
if compressed == false
|
@@ -341,11 +346,16 @@ module Erlang
|
|
341
346
|
"#{size_uncompressed_packed}#{data_compressed}"
|
342
347
|
end
|
343
348
|
end
|
344
|
-
|
349
|
+
|
350
|
+
# Elixir use can set to 'nil'
|
351
|
+
def self.set_undefined(value)
|
352
|
+
@@UNDEFINED = value
|
353
|
+
end
|
354
|
+
|
345
355
|
private
|
346
|
-
|
356
|
+
|
347
357
|
# binary_to_term implementation functions
|
348
|
-
|
358
|
+
|
349
359
|
def self.binary_to_term_(i, data)
|
350
360
|
tag = data[i].ord
|
351
361
|
i += 1
|
@@ -370,17 +380,7 @@ module Erlang
|
|
370
380
|
elsif tag == TAG_FLOAT_EXT
|
371
381
|
value = data[i,31].partition(0.chr)[0].to_f
|
372
382
|
return [i + 31, value]
|
373
|
-
elsif tag
|
374
|
-
j = data[i,2].unpack('n')[0]
|
375
|
-
i += 2
|
376
|
-
atom_name = data[i,j].force_encoding('ISO-8859-1')
|
377
|
-
if atom_name.valid_encoding?
|
378
|
-
return [i + j, atom_name.to_sym]
|
379
|
-
else
|
380
|
-
raise ParseException, 'invalid atom_name latin1', caller
|
381
|
-
end
|
382
|
-
elsif tag == TAG_NEW_PORT_EXT or \
|
383
|
-
tag == TAG_REFERENCE_EXT or tag == TAG_PORT_EXT
|
383
|
+
elsif Set[TAG_NEW_PORT_EXT,TAG_REFERENCE_EXT,TAG_PORT_EXT].include?(tag)
|
384
384
|
result = binary_to_atom(i, data)
|
385
385
|
i = result[0]; node = result[1]
|
386
386
|
id = data[i,4]
|
@@ -397,7 +397,7 @@ module Erlang
|
|
397
397
|
end
|
398
398
|
# tag == TAG_NEW_PORT_EXT or tag == TAG_PORT_EXT
|
399
399
|
return [i, OtpErlangPort.new(node, id, creation)]
|
400
|
-
elsif
|
400
|
+
elsif Set[TAG_NEW_PID_EXT, TAG_PID_EXT].include?(tag)
|
401
401
|
result = binary_to_atom(i, data)
|
402
402
|
i = result[0]; node = result[1]
|
403
403
|
id = data[i,4]
|
@@ -412,7 +412,7 @@ module Erlang
|
|
412
412
|
i += 1
|
413
413
|
end
|
414
414
|
return [i, OtpErlangPid.new(node, id, serial, creation)]
|
415
|
-
elsif
|
415
|
+
elsif Set[TAG_SMALL_TUPLE_EXT, TAG_LARGE_TUPLE_EXT].include?(tag)
|
416
416
|
if tag == TAG_SMALL_TUPLE_EXT
|
417
417
|
length = data[i].ord
|
418
418
|
i += 1
|
@@ -447,7 +447,7 @@ module Erlang
|
|
447
447
|
j = data[i,4].unpack('N')[0]
|
448
448
|
i += 4
|
449
449
|
return [i + j, OtpErlangBinary.new(data[i,j], 8)]
|
450
|
-
elsif
|
450
|
+
elsif Set[TAG_SMALL_BIG_EXT, TAG_LARGE_BIG_EXT].include?(tag)
|
451
451
|
if tag == TAG_SMALL_BIG_EXT
|
452
452
|
j = data[i].ord
|
453
453
|
i += 1
|
@@ -482,7 +482,7 @@ module Erlang
|
|
482
482
|
#arity = data[i].ord
|
483
483
|
i += 1
|
484
484
|
return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
|
485
|
-
elsif
|
485
|
+
elsif Set[TAG_NEWER_REFERENCE_EXT, TAG_NEW_REFERENCE_EXT].include?(tag)
|
486
486
|
j = data[i,2].unpack('n')[0] * 4
|
487
487
|
i += 2
|
488
488
|
result = binary_to_atom(i, data)
|
@@ -496,22 +496,6 @@ module Erlang
|
|
496
496
|
end
|
497
497
|
id = data[i,j]
|
498
498
|
return [i + j, OtpErlangReference.new(node, id, creation)]
|
499
|
-
elsif tag == TAG_SMALL_ATOM_EXT
|
500
|
-
j = data[i,1].ord
|
501
|
-
i += 1
|
502
|
-
atom_name = data[i,j].force_encoding('ISO-8859-1')
|
503
|
-
if atom_name.valid_encoding?
|
504
|
-
if atom_name == 'true'
|
505
|
-
tmp = true
|
506
|
-
elsif atom_name == 'false'
|
507
|
-
tmp = false
|
508
|
-
else
|
509
|
-
tmp = atom_name.to_sym
|
510
|
-
end
|
511
|
-
return [i + j, tmp]
|
512
|
-
else
|
513
|
-
raise ParseException, 'invalid atom_name latin1', caller
|
514
|
-
end
|
515
499
|
elsif tag == TAG_MAP_EXT
|
516
500
|
length = data[i,4].unpack('N')[0]
|
517
501
|
i += 4
|
@@ -539,23 +523,61 @@ module Erlang
|
|
539
523
|
result = binary_to_term_sequence(i, numfree, data)
|
540
524
|
i = result[0]#; free = result[1]
|
541
525
|
return [i, OtpErlangFunction.new(tag, data[old_i,i - old_i])]
|
542
|
-
elsif tag
|
526
|
+
elsif Set[TAG_ATOM_UTF8_EXT, TAG_ATOM_EXT].include?(tag)
|
543
527
|
j = data[i,2].unpack('n')[0]
|
544
528
|
i += 2
|
545
|
-
atom_name = data[i,j]
|
546
|
-
|
547
|
-
|
529
|
+
atom_name = data[i,j]
|
530
|
+
i = i + j
|
531
|
+
if atom_name == 'true'
|
532
|
+
return [i, true]
|
533
|
+
elsif atom_name == 'false'
|
534
|
+
return [i, false]
|
535
|
+
elsif atom_name == @@UNDEFINED
|
536
|
+
return [i, nil]
|
548
537
|
else
|
549
|
-
|
538
|
+
if tag == TAG_ATOM_UTF8_EXT
|
539
|
+
atom_name = atom_name.force_encoding('UTF-8')
|
540
|
+
if atom_name.valid_encoding?
|
541
|
+
return [i, atom_name.to_sym]
|
542
|
+
else
|
543
|
+
raise ParseException, 'invalid atom_name unicode', caller
|
544
|
+
end
|
545
|
+
else
|
546
|
+
atom_name = atom_name.force_encoding('ISO-8859-1')
|
547
|
+
if atom_name.valid_encoding?
|
548
|
+
return [i, OtpErlangAtom.new(atom_name)]
|
549
|
+
else
|
550
|
+
raise ParseException, 'invalid atom_name latin1', caller
|
551
|
+
end
|
552
|
+
end
|
550
553
|
end
|
551
|
-
elsif tag
|
554
|
+
elsif Set[TAG_SMALL_ATOM_UTF8_EXT, TAG_SMALL_ATOM_EXT].include?(tag)
|
552
555
|
j = data[i,1].ord
|
553
556
|
i += 1
|
554
|
-
atom_name = data[i,j]
|
555
|
-
|
556
|
-
|
557
|
+
atom_name = data[i,j]
|
558
|
+
i = i + j
|
559
|
+
if atom_name == 'true'
|
560
|
+
return [i, true]
|
561
|
+
elsif atom_name == 'false'
|
562
|
+
return [i, false]
|
563
|
+
elsif atom_name == @@UNDEFINED
|
564
|
+
return [i, nil]
|
557
565
|
else
|
558
|
-
|
566
|
+
if tag == TAG_SMALL_ATOM_UTF8_EXT
|
567
|
+
atom_name = atom_name.force_encoding('UTF-8')
|
568
|
+
if atom_name.valid_encoding?
|
569
|
+
return [i, atom_name.to_sym]
|
570
|
+
else
|
571
|
+
raise ParseException, 'invalid atom_name unicode', caller
|
572
|
+
end
|
573
|
+
else
|
574
|
+
atom_name = atom_name.force_encoding('ISO-8859-1')
|
575
|
+
if atom_name.valid_encoding?
|
576
|
+
return [i, OtpErlangAtom.new(atom_name)]
|
577
|
+
else
|
578
|
+
raise ParseException, 'invalid atom_name latin1', caller
|
579
|
+
end
|
580
|
+
end
|
559
581
|
end
|
560
582
|
elsif tag == TAG_COMPRESSED_ZLIB
|
561
583
|
size_uncompressed = data[i,4].unpack('N')[0]
|
@@ -579,7 +601,7 @@ module Erlang
|
|
579
601
|
raise ParseException, 'invalid tag', caller
|
580
602
|
end
|
581
603
|
end
|
582
|
-
|
604
|
+
|
583
605
|
def self.binary_to_term_sequence(i, length, data)
|
584
606
|
sequence = []
|
585
607
|
(0...length).each do |length_index|
|
@@ -591,7 +613,7 @@ module Erlang
|
|
591
613
|
end
|
592
614
|
|
593
615
|
# (binary_to_term Erlang term primitive type functions)
|
594
|
-
|
616
|
+
|
595
617
|
def self.binary_to_integer(i, data)
|
596
618
|
tag = data[i].ord
|
597
619
|
i += 1
|
@@ -607,7 +629,7 @@ module Erlang
|
|
607
629
|
raise ParseException, 'invalid integer tag', caller
|
608
630
|
end
|
609
631
|
end
|
610
|
-
|
632
|
+
|
611
633
|
def self.binary_to_pid(i, data)
|
612
634
|
tag = data[i].ord
|
613
635
|
i += 1
|
@@ -635,7 +657,7 @@ module Erlang
|
|
635
657
|
raise ParseException, 'invalid pid tag', caller
|
636
658
|
end
|
637
659
|
end
|
638
|
-
|
660
|
+
|
639
661
|
def self.binary_to_atom(i, data)
|
640
662
|
tag = data[i].ord
|
641
663
|
i += 1
|
@@ -671,9 +693,9 @@ module Erlang
|
|
671
693
|
raise ParseException, 'invalid atom tag', caller
|
672
694
|
end
|
673
695
|
end
|
674
|
-
|
696
|
+
|
675
697
|
# term_to_binary implementation functions
|
676
|
-
|
698
|
+
|
677
699
|
def self.term_to_binary_(term)
|
678
700
|
if term.kind_of?(String)
|
679
701
|
return string_to_binary(term)
|
@@ -689,15 +711,15 @@ module Erlang
|
|
689
711
|
return OtpErlangAtom.new(term.to_s).binary
|
690
712
|
elsif term.kind_of?(TrueClass)
|
691
713
|
return OtpErlangAtom.new(
|
692
|
-
'true'.force_encoding('
|
714
|
+
'true'.force_encoding('UTF-8')
|
693
715
|
).binary
|
694
716
|
elsif term.kind_of?(FalseClass)
|
695
717
|
return OtpErlangAtom.new(
|
696
|
-
'false'.force_encoding('
|
718
|
+
'false'.force_encoding('UTF-8')
|
697
719
|
).binary
|
698
720
|
elsif term.nil?
|
699
721
|
return OtpErlangAtom.new(
|
700
|
-
|
722
|
+
@@UNDEFINED.force_encoding('UTF-8')
|
701
723
|
).binary
|
702
724
|
elsif term.kind_of?(OtpErlangAtom)
|
703
725
|
return term.binary
|
@@ -719,7 +741,7 @@ module Erlang
|
|
719
741
|
end
|
720
742
|
|
721
743
|
# (term_to_binary Erlang term composite type functions)
|
722
|
-
|
744
|
+
|
723
745
|
def self.string_to_binary(term)
|
724
746
|
length = term.bytesize
|
725
747
|
if length == 0
|
@@ -738,7 +760,7 @@ module Erlang
|
|
738
760
|
raise OutputException, 'uint32 overflow', caller
|
739
761
|
end
|
740
762
|
end
|
741
|
-
|
763
|
+
|
742
764
|
def self.tuple_to_binary(term)
|
743
765
|
length = term.length
|
744
766
|
term_packed = term.map{ |element|
|
@@ -753,7 +775,7 @@ module Erlang
|
|
753
775
|
raise OutputException, 'uint32 overflow', caller
|
754
776
|
end
|
755
777
|
end
|
756
|
-
|
778
|
+
|
757
779
|
def self.hash_to_binary(term)
|
758
780
|
length = term.length
|
759
781
|
if length <= 4294967295
|
@@ -781,7 +803,7 @@ module Erlang
|
|
781
803
|
return bignum_to_binary(term)
|
782
804
|
end
|
783
805
|
end
|
784
|
-
|
806
|
+
|
785
807
|
def self.bignum_to_binary(term)
|
786
808
|
bignum = term.abs
|
787
809
|
if term < 0
|
@@ -811,7 +833,7 @@ module Erlang
|
|
811
833
|
end
|
812
834
|
|
813
835
|
# Exception classes listed alphabetically
|
814
|
-
|
836
|
+
|
815
837
|
class InputException < ArgumentError
|
816
838
|
end
|
817
839
|
|
@@ -820,7 +842,7 @@ module Erlang
|
|
820
842
|
|
821
843
|
class ParseException < SyntaxError
|
822
844
|
end
|
823
|
-
|
845
|
+
|
824
846
|
# tag values here http://www.erlang.org/doc/apps/erts/erl_ext_dist.html
|
825
847
|
TAG_VERSION = 131
|
826
848
|
TAG_COMPRESSED_ZLIB = 80
|
data/tests/erlang_tests.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# MIT License
|
6
6
|
#
|
7
|
-
# Copyright (c) 2014-
|
7
|
+
# Copyright (c) 2014-2022 Michael Truog <mjtruog at protonmail dot com>
|
8
8
|
# Copyright (c) 2009-2013 Dmitry Vasiliev <dima@hlabs.org>
|
9
9
|
#
|
10
10
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
@@ -119,18 +119,26 @@ class DecodeTestCase < Test::Unit::TestCase
|
|
119
119
|
assert_raise(Erlang::ParseException){
|
120
120
|
Erlang::binary_to_term("\x83d\0\1")
|
121
121
|
}
|
122
|
-
assert_equal(:'', Erlang::binary_to_term("\
|
123
|
-
assert_equal(:'', Erlang::binary_to_term("\
|
124
|
-
assert_equal(:test, Erlang::binary_to_term("\
|
125
|
-
assert_equal(:test, Erlang::binary_to_term("\
|
122
|
+
assert_equal(:'', Erlang::binary_to_term("\x83v\0\0"))
|
123
|
+
assert_equal(:'', Erlang::binary_to_term("\x83w\0"))
|
124
|
+
assert_equal(:test, Erlang::binary_to_term("\x83v\0\4test"))
|
125
|
+
assert_equal(:test, Erlang::binary_to_term("\x83w\4test"))
|
126
126
|
end
|
127
127
|
def test_binary_to_term_predefined_atoms
|
128
128
|
assert_equal(true,
|
129
129
|
Erlang::binary_to_term("\x83s\4true"))
|
130
130
|
assert_equal(false,
|
131
131
|
Erlang::binary_to_term("\x83s\5false"))
|
132
|
-
assert_equal(
|
132
|
+
assert_equal(false,
|
133
|
+
Erlang::binary_to_term("\x83w\5false"))
|
134
|
+
assert_equal(nil,
|
135
|
+
Erlang::binary_to_term("\x83s\11undefined"))
|
136
|
+
assert_equal(nil,
|
137
|
+
Erlang::binary_to_term("\x83w\11undefined"))
|
138
|
+
assert_equal(nil,
|
133
139
|
Erlang::binary_to_term("\x83d\0\11undefined"))
|
140
|
+
assert_equal(nil,
|
141
|
+
Erlang::binary_to_term("\x83v\0\11undefined"))
|
134
142
|
end
|
135
143
|
def test_binary_to_term_empty_list
|
136
144
|
assert_equal(Erlang::OtpErlangList.new([]),
|
@@ -175,7 +183,7 @@ class DecodeTestCase < Test::Unit::TestCase
|
|
175
183
|
assert_raise(Erlang::ParseException){
|
176
184
|
Erlang::binary_to_term("\x83l\0\0\0\0k")
|
177
185
|
}
|
178
|
-
lst = Erlang::binary_to_term("\x83l\0\0\0\
|
186
|
+
lst = Erlang::binary_to_term("\x83l\0\0\0\1jv\0\4tail")
|
179
187
|
assert(lst.kind_of?(Erlang::OtpErlangList))
|
180
188
|
assert_equal([Erlang::OtpErlangList.new([]), :tail], lst.value)
|
181
189
|
assert_equal(true, lst.improper)
|
@@ -586,9 +594,9 @@ class EncodeTestCase < Test::Unit::TestCase
|
|
586
594
|
Erlang::term_to_binary('test'))
|
587
595
|
end
|
588
596
|
def test_term_to_binary_predefined_atom
|
589
|
-
assert_equal("\
|
590
|
-
assert_equal("\
|
591
|
-
assert_equal("\
|
597
|
+
assert_equal("\x83w\4true", Erlang::term_to_binary(true))
|
598
|
+
assert_equal("\x83w\5false", Erlang::term_to_binary(false))
|
599
|
+
assert_equal("\x83w\x09undefined", Erlang::term_to_binary(nil))
|
592
600
|
end
|
593
601
|
def test_term_to_binary_short_integer
|
594
602
|
assert_equal("\x83a\0", Erlang::term_to_binary(0))
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erlang_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Truog
|
@@ -11,32 +11,32 @@ cert_chain:
|
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
13
|
MIIESDCCArCgAwIBAgIBATANBgkqhkiG9w0BAQsFADAnMSUwIwYDVQQDDBxtanRy
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
14
|
+
dW9nL0RDPXByb3Rvbm1haWwvREM9Y29tMB4XDTIyMTAxMjIwMDU0MloXDTIzMTAx
|
15
|
+
MjIwMDU0MlowJzElMCMGA1UEAwwcbWp0cnVvZy9EQz1wcm90b25tYWlsL0RDPWNv
|
16
|
+
bTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAL9nIaNAY7hDthCtaBzd
|
17
|
+
KhqiT5DXoVMqM/ya+Y676+M6WnUcqvsCJ3XvE0axG/0u0jAbu0XejTZ2/9NcETHf
|
18
|
+
N4T2bw7jA6Vnn+rN2gKk62KlEzQVxZN+zbNme6fsxQ6j+nc4kqB6s6pd8VdTElJz
|
19
|
+
goBHUm/wmFRIpcbd+MZRQz+OJASi7Swjx+r65cFG7Ik7BriTnJLoAnrso1dfAYCV
|
20
|
+
ptrn+OMq33MFKkxneu7FrZsaD7Qo0taKl7nenZmG+qCzvJfiprzMyE1JDGPJptmf
|
21
|
+
VpjCct+Zolwa1MS+W07VS09iSllQ2xQPjSeMkrjKmjss3+kig4oKYTRP6gpdbWd7
|
22
|
+
hWIn/h2mQ3OmGeAlq6rcN0p9PVTYTByRT773g21fJHPa3GpHGfXfz6fV2D3aG1/F
|
23
|
+
dUgJMiWjhuHQQSbLEHZpxyaN0siAzbmwpzOXs2slBX+v3VMiNPT2fvLYWIfg7sVn
|
24
|
+
oCmqqb7Y+1qqCh68O+0A6+AGQQm2j8BUwRxyMFft6jeCPwIDAQABo38wfTAJBgNV
|
25
|
+
HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUip5VZOKxMDY7Gw5PV5KjDOUB
|
26
|
+
aPAwIQYDVR0RBBowGIEWbWp0cnVvZ0Bwcm90b25tYWlsLmNvbTAhBgNVHRIEGjAY
|
27
|
+
gRZtanRydW9nQHByb3Rvbm1haWwuY29tMA0GCSqGSIb3DQEBCwUAA4IBgQC8NHmm
|
28
|
+
ytJq5FerCrZhwcyUN+OkBP5xDO3N5Vv7v5AcJ8R4+XpEE0J+Xi5ZPNRwDcVVA1f3
|
29
|
+
QPYrzFhgAFh9Fj7vzeYJIe3gGEgLvJZe5t5sTQCg1O4hg97qUrXz894KUMYzxFxv
|
30
|
+
r5Ujpaa5jIeCRLLEoMRCj2LM7aTD0BJ4D9rjUpOguALeMDjXuRFpPG0V2bRBR5yX
|
31
|
+
FgoLpkThWNwOrjTqmnXnJSQcOJTJaTZkXuY/vXI/AcN7aGbDi8gifgvvS6Umju+z
|
32
|
+
VFSVwtQuPhU4ruToRGUseXOsPwwWnJPleiEX5RQOIJ4mGmHzx5FnoDYNlHkS8DTT
|
33
|
+
K+77PgOz8oMDmzrQlCx1FDWhgNqsImrLYcca7kcoINTasLWmvfz1xaBeP4MdCk0R
|
34
|
+
CUaImqpeG21iNKLYHcNZkGfepUpp4FHudbeQeaJj8R5ug+f402l7T4s3JCAOcVIY
|
35
|
+
MqZAStuHt2H1iR+JVSpFx1kkRJncIjtSnxUFd4MsBT083aOme9H/J+tb/YA=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date:
|
37
|
+
date: 2022-10-12 00:00:00.000000000 Z
|
38
38
|
dependencies: []
|
39
|
-
description: Erlang
|
39
|
+
description: Erlang External Term Format for Ruby
|
40
40
|
email: mjtruog@protonmail.com
|
41
41
|
executables: []
|
42
42
|
extensions: []
|
metadata.gz.sig
CHANGED
Binary file
|