bayserver-docker-http 2.2.0

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 (52) hide show
  1. checksums.yaml +7 -0
  2. data/lib/baykit/bayserver/docker/http/h1/command/cmd_content.rb +46 -0
  3. data/lib/baykit/bayserver/docker/http/h1/command/cmd_end_content.rb +37 -0
  4. data/lib/baykit/bayserver/docker/http/h1/command/cmd_header.rb +306 -0
  5. data/lib/baykit/bayserver/docker/http/h1/command/package.rb +3 -0
  6. data/lib/baykit/bayserver/docker/http/h1/h1_command.rb +19 -0
  7. data/lib/baykit/bayserver/docker/http/h1/h1_command_handler.rb +31 -0
  8. data/lib/baykit/bayserver/docker/http/h1/h1_command_unpacker.rb +58 -0
  9. data/lib/baykit/bayserver/docker/http/h1/h1_inbound_handler.rb +371 -0
  10. data/lib/baykit/bayserver/docker/http/h1/h1_packet.rb +28 -0
  11. data/lib/baykit/bayserver/docker/http/h1/h1_packet_factory.rb +21 -0
  12. data/lib/baykit/bayserver/docker/http/h1/h1_packet_unpacker.rb +180 -0
  13. data/lib/baykit/bayserver/docker/http/h1/h1_protocol_handler.rb +66 -0
  14. data/lib/baykit/bayserver/docker/http/h1/h1_type.rb +18 -0
  15. data/lib/baykit/bayserver/docker/http/h1/h1_warp_handler.rb +228 -0
  16. data/lib/baykit/bayserver/docker/http/h1/package.rb +11 -0
  17. data/lib/baykit/bayserver/docker/http/h2/command/cmd_data.rb +65 -0
  18. data/lib/baykit/bayserver/docker/http/h2/command/cmd_go_away.rb +67 -0
  19. data/lib/baykit/bayserver/docker/http/h2/command/cmd_headers.rb +108 -0
  20. data/lib/baykit/bayserver/docker/http/h2/command/cmd_ping.rb +50 -0
  21. data/lib/baykit/bayserver/docker/http/h2/command/cmd_preface.rb +51 -0
  22. data/lib/baykit/bayserver/docker/http/h2/command/cmd_priority.rb +59 -0
  23. data/lib/baykit/bayserver/docker/http/h2/command/cmd_rst_stream.rb +50 -0
  24. data/lib/baykit/bayserver/docker/http/h2/command/cmd_settings.rb +98 -0
  25. data/lib/baykit/bayserver/docker/http/h2/command/cmd_window_update.rb +53 -0
  26. data/lib/baykit/bayserver/docker/http/h2/command/package.rb +9 -0
  27. data/lib/baykit/bayserver/docker/http/h2/h2_command.rb +42 -0
  28. data/lib/baykit/bayserver/docker/http/h2/h2_command_handler.rb +29 -0
  29. data/lib/baykit/bayserver/docker/http/h2/h2_command_unpacker.rb +73 -0
  30. data/lib/baykit/bayserver/docker/http/h2/h2_error_code.rb +53 -0
  31. data/lib/baykit/bayserver/docker/http/h2/h2_flags.rb +82 -0
  32. data/lib/baykit/bayserver/docker/http/h2/h2_inbound_handler.rb +417 -0
  33. data/lib/baykit/bayserver/docker/http/h2/h2_packet.rb +204 -0
  34. data/lib/baykit/bayserver/docker/http/h2/h2_packet_factory.rb +21 -0
  35. data/lib/baykit/bayserver/docker/http/h2/h2_packet_unpacker.rb +224 -0
  36. data/lib/baykit/bayserver/docker/http/h2/h2_protocol_handler.rb +58 -0
  37. data/lib/baykit/bayserver/docker/http/h2/h2_settings.rb +42 -0
  38. data/lib/baykit/bayserver/docker/http/h2/h2_type.rb +26 -0
  39. data/lib/baykit/bayserver/docker/http/h2/h2_warp_handler.rb +142 -0
  40. data/lib/baykit/bayserver/docker/http/h2/header_block.rb +191 -0
  41. data/lib/baykit/bayserver/docker/http/h2/header_block_analyzer.rb +88 -0
  42. data/lib/baykit/bayserver/docker/http/h2/header_block_builder.rb +68 -0
  43. data/lib/baykit/bayserver/docker/http/h2/header_table.rb +167 -0
  44. data/lib/baykit/bayserver/docker/http/h2/huffman/hnode.rb +28 -0
  45. data/lib/baykit/bayserver/docker/http/h2/huffman/htree.rb +339 -0
  46. data/lib/baykit/bayserver/docker/http/h2/package.rb +17 -0
  47. data/lib/baykit/bayserver/docker/http/htp_docker.rb +23 -0
  48. data/lib/baykit/bayserver/docker/http/htp_port_docker.rb +107 -0
  49. data/lib/baykit/bayserver/docker/http/htp_warp_docker.rb +125 -0
  50. data/lib/baykit/bayserver/docker/http/htp_warp_ship_helper.rb +19 -0
  51. data/lib/baykit/bayserver/docker/http/package.rb +6 -0
  52. metadata +106 -0
@@ -0,0 +1,88 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module Http
5
+ module H2
6
+ class HeaderBlockAnalyzer
7
+
8
+ attr :name
9
+ attr :value
10
+ attr :method
11
+ attr :path
12
+ attr :scheme
13
+ attr :status
14
+
15
+ def clear
16
+ @name = nil
17
+ @value = nil
18
+ @method = nil
19
+ @path = nil
20
+ @scheme = nil
21
+ @status = nil
22
+ end
23
+
24
+ def analyze_header_block(blk, tbl)
25
+ clear
26
+ case blk.op
27
+ when HeaderBlock::INDEX
28
+ kv = tbl.get(blk.index)
29
+ if kv == nil
30
+ raise RuntimeError.new "Invalid header index: #{blk.index}"
31
+ end
32
+ @name = kv.name
33
+ @value = kv.value
34
+
35
+ when HeaderBlock::KNOWN_HEADER, HeaderBlock::OVERLOAD_KNOWN_HEADER
36
+ kv = tbl.get(blk.index)
37
+ if kv == nil
38
+ raise RuntimeError.new "Invalid header index: #{blk.index}"
39
+ end
40
+ @name = kv.name
41
+ @value = blk.value
42
+ if blk.op == HeaderBlock::OVERLOAD_KNOWN_HEADER
43
+ tbl.insert(@name, @value)
44
+ end
45
+
46
+ when HeaderBlock::NEW_HEADER
47
+ @name = blk.name
48
+ @value = blk.value
49
+ tbl.insert(@name, @value)
50
+
51
+ when HeaderBlock::UNKNOWN_HEADER
52
+ @name = blk.name
53
+ @value = blk.value
54
+
55
+ when HeaderBlock::UPDATE_DYNAMIC_TABLE_SIZE
56
+ tbl.set_size(blk.size)
57
+
58
+ else
59
+ raise RuntimeError.new("Illegal state")
60
+
61
+ end
62
+
63
+ if @name != nil && @name[0] == ":"
64
+ case @name
65
+ when HeaderTable::PSEUDO_HEADER_AUTHORITY
66
+ @name = "host"
67
+
68
+ when HeaderTable::PSEUDO_HEADER_METHOD
69
+ @method = @value
70
+
71
+ when HeaderTable::PSEUDO_HEADER_PATH
72
+ @path = @value
73
+
74
+ when HeaderTable::PSEUDO_HEADER_SCHEME
75
+ @scheme = @value
76
+
77
+ when HeaderTable::PSEUDO_HEADER_STATUS
78
+ @status = @value
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
88
+
@@ -0,0 +1,68 @@
1
+ module Baykit
2
+ module BayServer
3
+ module Docker
4
+ module Http
5
+ module H2
6
+ class HeaderBlockBuilder
7
+
8
+ def build_header_block(name, value, tbl)
9
+ idx_list = tbl.get_idx_list(name)
10
+ blk = nil
11
+
12
+ idx_list.each do |idx|
13
+ kv = tbl.get(idx)
14
+ if kv != nil && value == kv.value
15
+ blk = HeaderBlock.new
16
+ blk.op = HeaderBlock::INDEX
17
+ blk.index = idx
18
+ break
19
+ end
20
+ end
21
+
22
+ if blk == nil
23
+ blk = HeaderBlock.new()
24
+ if idx_list.length > 0
25
+ blk.op = HeaderBlock::KNOWN_HEADER
26
+ blk.index = idx_list[0]
27
+ blk.value = value
28
+ else
29
+ blk.op = HeaderBlock::UNKNOWN_HEADER
30
+ blk.name = name
31
+ blk.value = value
32
+ end
33
+ end
34
+
35
+ return blk
36
+ end
37
+
38
+ def build_status_block(status, tbl)
39
+ st_index = -1
40
+
41
+ status_index_list = tbl.get(":status")
42
+ status_index_list.each do |index|
43
+ kv = tbl.get(index)
44
+ if kv != nil && status == kv.value.to_i
45
+ st_index = index
46
+ break
47
+ end
48
+ end
49
+
50
+ blk = HeaderBlock.new()
51
+ if st_index == -1
52
+ blk.op = HeaderBlock::INDEX
53
+ blk.index = st_index
54
+ else
55
+ blk.op = HeaderBlock::KNOWN_HEADER
56
+ blk.index = status_index_list[0]
57
+ blk.value = status.to_i
58
+ end
59
+
60
+ return blk
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
@@ -0,0 +1,167 @@
1
+ require 'baykit/bayserver/util/key_val'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Docker
6
+ module Http
7
+ module H2
8
+ class HeaderTable
9
+ include Baykit::BayServer::Util
10
+
11
+ PSEUDO_HEADER_AUTHORITY = ":authority"
12
+ PSEUDO_HEADER_METHOD = ":method"
13
+ PSEUDO_HEADER_PATH = ":path"
14
+ PSEUDO_HEADER_SCHEME = ":scheme"
15
+ PSEUDO_HEADER_STATUS = ":status"
16
+
17
+ attr :idx_map
18
+ attr :add_count
19
+ attr :name_map
20
+
21
+ def initialize
22
+ @idx_map = []
23
+ @add_count = 0
24
+ @name_map = {}
25
+ end
26
+
27
+ def get(idx)
28
+ if idx <= 0 || idx > HeaderTable.static_size + @idx_map.length
29
+ raise RuntimeError "idx=#{idx} static=#{HeaderTable.static_size} dynamic=#{@idx_map.length}"
30
+ end
31
+
32
+ if idx <= HeaderTable.static_size
33
+ kv = HeaderTable.static_table.idx_map[idx - 1]
34
+ else
35
+ kv = @idx_map[(idx - HeaderTable.static_size) - 1]
36
+ end
37
+ kv
38
+ end
39
+
40
+ def get_idx_list(name)
41
+ dynamic_list = @name_map[name]
42
+ static_list = HeaderTable.static_table.name_map[name]
43
+
44
+ idx_list = []
45
+ if static_list != nil
46
+ idx_list.concat static_list
47
+ end
48
+ if dynamic_list != nil
49
+ dynamic_list.each do |idx|
50
+ real_index = @add_count - idx + HeaderTable.static_size
51
+ idx_list << real_index
52
+ end
53
+ end
54
+ return idx_list
55
+ end
56
+
57
+ def insert(name, value)
58
+ @idx_map.insert(0, KeyVal.new(name, value))
59
+ @add_count += 1
60
+ add_to_name_map(name, @add_count)
61
+ end
62
+
63
+ def set_size(size)
64
+
65
+ end
66
+
67
+ def put(idx, name, value)
68
+ if idx != @idx_map.length + 1
69
+ raise RuntimeError.new("Illegal State")
70
+ end
71
+ @idx_map.append(KeyVal.new(name, value))
72
+ add_to_name_map(name, idx)
73
+ end
74
+
75
+ private
76
+ def add_to_name_map(name, idx)
77
+ idx_list = @name_map[name]
78
+ if idx_list == nil
79
+ idx_list = []
80
+ @name_map[name] = idx_list
81
+ end
82
+ idx_list.append(idx)
83
+ end
84
+
85
+ def self.create_dynamic_table()
86
+ t = HeaderTable.new()
87
+ t
88
+ end
89
+
90
+ class << self
91
+ attr :static_table
92
+ attr :static_size
93
+ end
94
+ @static_table = HeaderTable.new()
95
+ @static_size = 0
96
+
97
+ @static_table.put(1, PSEUDO_HEADER_AUTHORITY, "")
98
+ @static_table.put(2, PSEUDO_HEADER_METHOD, "GET")
99
+ @static_table.put(3, PSEUDO_HEADER_METHOD, "POST")
100
+ @static_table.put(4, PSEUDO_HEADER_PATH, "/")
101
+ @static_table.put(5, PSEUDO_HEADER_PATH, "/index.html")
102
+ @static_table.put(6, PSEUDO_HEADER_SCHEME, "http")
103
+ @static_table.put(7, PSEUDO_HEADER_SCHEME, "https")
104
+ @static_table.put(8, PSEUDO_HEADER_STATUS, "200")
105
+ @static_table.put(9, PSEUDO_HEADER_STATUS, "204")
106
+ @static_table.put(10, PSEUDO_HEADER_STATUS, "206")
107
+ @static_table.put(11, PSEUDO_HEADER_STATUS, "304")
108
+ @static_table.put(12, PSEUDO_HEADER_STATUS, "400")
109
+ @static_table.put(13, PSEUDO_HEADER_STATUS, "404")
110
+ @static_table.put(14, PSEUDO_HEADER_STATUS, "500")
111
+ @static_table.put(15, "accept-charset", "")
112
+ @static_table.put(16, "accept-encoding", "gzip, deflate")
113
+ @static_table.put(17, "accept-language", "")
114
+ @static_table.put(18, "accept-ranges", "")
115
+ @static_table.put(19, "accept", "")
116
+ @static_table.put(20, "access-control-allow-origin", "")
117
+ @static_table.put(21, "age", "")
118
+ @static_table.put(22, "allow", "")
119
+ @static_table.put(23, "authorization", "")
120
+ @static_table.put(24, "cache-control", "")
121
+ @static_table.put(25, "content-disposition", "")
122
+ @static_table.put(26, "content-encoding", "")
123
+ @static_table.put(27, "content-language", "")
124
+ @static_table.put(28, "content-length", "")
125
+ @static_table.put(29, "content-location", "")
126
+ @static_table.put(30, "content-range", "")
127
+ @static_table.put(31, "content-type", "")
128
+ @static_table.put(32, "cookie", "")
129
+ @static_table.put(33, "date", "")
130
+ @static_table.put(34, "etag", "")
131
+ @static_table.put(35, "expect", "")
132
+ @static_table.put(36, "expires", "")
133
+ @static_table.put(37, "from", "")
134
+ @static_table.put(38, "host", "")
135
+ @static_table.put(39, "if-match", "")
136
+ @static_table.put(40, "if-modified-since", "")
137
+ @static_table.put(41, "if-none-match", "")
138
+ @static_table.put(42, "if-range", "")
139
+ @static_table.put(43, "if-unmodified-since", "")
140
+ @static_table.put(44, "last-modified", "")
141
+ @static_table.put(45, "link", "")
142
+ @static_table.put(46, "location", "")
143
+ @static_table.put(47, "max-forwards", "")
144
+ @static_table.put(48, "proxy-authenticate", "")
145
+ @static_table.put(49, "proxy-authorization", "")
146
+ @static_table.put(50, "range", "")
147
+ @static_table.put(51, "referer", "")
148
+ @static_table.put(52, "refresh", "")
149
+ @static_table.put(53, "retry-after", "")
150
+ @static_table.put(54, "server", "")
151
+ @static_table.put(55, "set-cookie", "")
152
+ @static_table.put(56, "strict-transport-security", "")
153
+ @static_table.put(57, "transfer-encoding", "")
154
+ @static_table.put(58, "user-agent", "")
155
+ @static_table.put(59, "vary", "")
156
+ @static_table.put(60, "via", "")
157
+ @static_table.put(61, "www-authenticate", "")
158
+
159
+ @static_size = @static_table.idx_map.length
160
+
161
+ end
162
+ end
163
+ end
164
+ end
165
+ end
166
+ end
167
+
@@ -0,0 +1,28 @@
1
+ require 'baykit/bayserver/docker/http/h2/package'
2
+
3
+ module Baykit
4
+ module BayServer
5
+ module Docker
6
+ module Http
7
+ module H2
8
+ module Huffman
9
+
10
+ class HNode
11
+ attr_accessor :value
12
+ attr_accessor :one
13
+ attr_accessor :zero
14
+
15
+ def initialize
16
+ @value = -1
17
+ @one = nil
18
+ @zero = nil
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,339 @@
1
+ require 'baykit/bayserver/docker/http/h2/package'
2
+ require 'baykit/bayserver/docker/http/h2/huffman/hnode'
3
+
4
+ module Baykit
5
+ module BayServer
6
+ module Docker
7
+ module Http
8
+ module H2
9
+ module Huffman
10
+
11
+ class HTree
12
+
13
+ class << self
14
+ attr :root
15
+ end
16
+
17
+ @root = HNode.new
18
+
19
+ def self.decode(data)
20
+ w = ""
21
+ cur = @root
22
+ data.length.times do |i|
23
+ if data[i] == nil
24
+ BayLog.info "NIL"
25
+ end
26
+ 8.times do |j|
27
+ bit = data[i].codepoints[0] >> (8-j-1) & 0x1
28
+
29
+ # down tree
30
+ if bit == 1
31
+ cur = cur.one
32
+ else
33
+ cur = cur.zero
34
+ end
35
+
36
+ if cur.value > 0
37
+ # leaf node
38
+ w.concat(cur.value.chr)
39
+ cur = @root
40
+ end
41
+ end
42
+ end
43
+ return w
44
+ end
45
+
46
+ def self.insert(code, len_in_bits, sym)
47
+ bits = Array.new(len_in_bits)
48
+ len_in_bits.times do |i|
49
+ bits[i] = code >> (len_in_bits - i - 1) & 0x1
50
+ end
51
+ insert_bits bits, sym
52
+ end
53
+
54
+ def self.insert_bits(code, sym)
55
+ cur = @root
56
+ code.length.times do |i|
57
+ if code[i] == 1
58
+ if cur.one == nil
59
+ cur.one = HNode.new()
60
+ end
61
+ cur = cur.one
62
+ else
63
+ if cur.zero == nil
64
+ cur.zero = HNode.new()
65
+ end
66
+ cur = cur.zero
67
+ end
68
+ end
69
+ cur.value = sym
70
+ end
71
+
72
+ class << self
73
+ HTree.insert(0x1ff8,13,0)
74
+ HTree.insert(0x7fffd8,23,1)
75
+ HTree.insert(0xfffffe2,28,2)
76
+ HTree.insert(0xfffffe3,28,3)
77
+ HTree.insert(0xfffffe4,28,4)
78
+ HTree.insert(0xfffffe5,28,5)
79
+ HTree.insert(0xfffffe6,28,6)
80
+ HTree.insert(0xfffffe7,28,7)
81
+ HTree.insert(0xfffffe8,28,8)
82
+ HTree.insert(0xffffea,24,9)
83
+ HTree.insert(0x3ffffffc,30,10)
84
+ HTree.insert(0xfffffe9,28,11)
85
+ HTree.insert(0xfffffea,28,12)
86
+ HTree.insert(0x3ffffffd,30,13)
87
+ HTree.insert(0xfffffeb,28,14)
88
+ HTree.insert(0xfffffec,28,15)
89
+ HTree.insert(0xfffffed,28,16)
90
+ HTree.insert(0xfffffee,28,17)
91
+ HTree.insert(0xfffffef,28,18)
92
+ HTree.insert(0xffffff0,28,19)
93
+ HTree.insert(0xffffff1,28,20)
94
+ HTree.insert(0xffffff2,28,21)
95
+ HTree.insert(0x3ffffffe,30,22)
96
+ HTree.insert(0xffffff3,28,23)
97
+ HTree.insert(0xffffff4,28,24)
98
+ HTree.insert(0xffffff5,28,25)
99
+ HTree.insert(0xffffff6,28,26)
100
+ HTree.insert(0xffffff7,28,27)
101
+ HTree.insert(0xffffff8,28,28)
102
+ HTree.insert(0xffffff9,28,29)
103
+ HTree.insert(0xffffffa,28,30)
104
+ HTree.insert(0xffffffb,28,31)
105
+ HTree.insert(0x14,6,32)
106
+ HTree.insert(0x3f8,10,33)
107
+ HTree.insert(0x3f9,10,34)
108
+ HTree.insert(0xffa,12,35)
109
+ HTree.insert(0x1ff9,13,36)
110
+ HTree.insert(0x15,6,37)
111
+ HTree.insert(0xf8,8,38)
112
+ HTree.insert(0x7fa,11,39)
113
+ HTree.insert(0x3fa, 10, 40)
114
+ HTree.insert(0x3fb,10,41)
115
+ HTree.insert(0xf9,8,42)
116
+ HTree.insert(0x7fb,11,43)
117
+ HTree.insert(0xfa,8,44)
118
+ HTree.insert(0x16,6,45)
119
+ HTree.insert(0x17,6,46)
120
+ HTree.insert(0x18,6,47)
121
+ HTree.insert(0x0,5,48)
122
+ HTree.insert(0x1,5,49)
123
+ HTree.insert(0x2,5,50)
124
+ HTree.insert(0x19,6,51)
125
+ HTree.insert(0x1a,6,52)
126
+ HTree.insert(0x1b,6,53)
127
+ HTree.insert(0x1c,6,54)
128
+ HTree.insert(0x1d,6,55)
129
+ HTree.insert(0x1e,6,56)
130
+ HTree.insert(0x1f,6,57)
131
+ HTree.insert(0x5c,7,58)
132
+ HTree.insert(0xfb,8,59)
133
+ HTree.insert(0x7ffc,15,60)
134
+ HTree.insert(0x20,6,61)
135
+ HTree.insert(0xffb,12,62)
136
+ HTree.insert(0x3fc,10,63)
137
+ HTree.insert(0x1ffa,13,64)
138
+ HTree.insert(0x21,6,65)
139
+ HTree.insert(0x5d,7,66)
140
+ HTree.insert(0x5e,7,67)
141
+ HTree.insert(0x5f,7,68)
142
+ HTree.insert(0x60,7,69)
143
+ HTree.insert(0x61,7,70)
144
+ HTree.insert(0x62,7,71)
145
+ HTree.insert(0x63,7,72)
146
+ HTree.insert(0x64,7,73)
147
+ HTree.insert(0x65,7,74)
148
+ HTree.insert(0x66,7,75)
149
+ HTree.insert(0x67,7,76)
150
+ HTree.insert(0x68,7,77)
151
+ HTree.insert(0x69,7,78)
152
+ HTree.insert(0x6a,7,79)
153
+ HTree.insert(0x6b,7,80)
154
+ HTree.insert(0x6c,7,81)
155
+ HTree.insert(0x6d,7,82)
156
+ HTree.insert(0x6e,7,83)
157
+ HTree.insert(0x6f,7,84)
158
+ HTree.insert(0x70,7,85)
159
+ HTree.insert(0x71,7,86)
160
+ HTree.insert(0x72,7,87)
161
+ HTree.insert(0xfc,8,88)
162
+ HTree.insert(0x73,7,89)
163
+ HTree.insert(0xfd,8,90)
164
+ HTree.insert(0x1ffb,13,91)
165
+ HTree.insert(0x7fff0,19,92)
166
+ HTree.insert(0x1ffc,13,93)
167
+ HTree.insert(0x3ffc,14,94)
168
+ HTree.insert(0x22,6,95)
169
+ HTree.insert(0x7ffd,15,96)
170
+ HTree.insert(0x3,5,97)
171
+ HTree.insert(0x23,6,98)
172
+ HTree.insert(0x4,5,99)
173
+ HTree.insert(0x24,6,100)
174
+ HTree.insert(0x5,5,101)
175
+ HTree.insert(0x25,6,102)
176
+ HTree.insert(0x26,6,103)
177
+ HTree.insert(0x27,6,104)
178
+ HTree.insert(0x6,5,105)
179
+ HTree.insert(0x74,7,106)
180
+ HTree.insert(0x75,7,107)
181
+ HTree.insert(0x28,6,108)
182
+ HTree.insert(0x29,6,109)
183
+ HTree.insert(0x2a,6,110)
184
+ HTree.insert(0x7,5,111)
185
+ HTree.insert(0x2b,6,112)
186
+ HTree.insert(0x76,7,113)
187
+ HTree.insert(0x2c,6,114)
188
+ HTree.insert(0x8,5,115)
189
+ HTree.insert(0x9,5,116)
190
+ HTree.insert(0x2d,6,117)
191
+ HTree.insert(0x77,7,118)
192
+ HTree.insert(0x78,7,119)
193
+ HTree.insert(0x79,7,120)
194
+ HTree.insert(0x7a,7,121)
195
+ HTree.insert(0x7b,7,122)
196
+ HTree.insert(0x7ffe,15,123)
197
+ HTree.insert(0x7fc,11,124)
198
+ HTree.insert(0x3ffd,14,125)
199
+ HTree.insert(0x1ffd,13,126)
200
+ HTree.insert(0xffffffc,28,127)
201
+ HTree.insert(0xfffe6,20,128)
202
+ HTree.insert(0x3fffd2,22,129)
203
+ HTree.insert(0xfffe7,20,130)
204
+ HTree.insert(0xfffe8,20,131)
205
+ HTree.insert(0x3fffd3,22,132)
206
+ HTree.insert(0x3fffd4,22,133)
207
+ HTree.insert(0x3fffd5,22,134)
208
+ HTree.insert(0x7fffd9,23,135)
209
+ HTree.insert(0x3fffd6,22,136)
210
+ HTree.insert(0x7fffda,23,137)
211
+ HTree.insert(0x7fffdb,23,138)
212
+ HTree.insert(0x7fffdc,23,139)
213
+ HTree.insert(0x7fffdd,23,140)
214
+ HTree.insert(0x7fffde,23,141)
215
+ HTree.insert(0xffffeb,24,142)
216
+ HTree.insert(0x7fffdf,23,143)
217
+ HTree.insert(0xffffec,24,144)
218
+ HTree.insert(0xffffed,24,145)
219
+ HTree.insert(0x3fffd7,22,146)
220
+ HTree.insert(0x7fffe0,23,147)
221
+ HTree.insert(0xffffee,24,148)
222
+ HTree.insert(0x7fffe1,23,149)
223
+ HTree.insert(0x7fffe2,23,150)
224
+ HTree.insert(0x7fffe3,23,151)
225
+ HTree.insert(0x7fffe4,23,152)
226
+ HTree.insert(0x1fffdc,21,153)
227
+ HTree.insert(0x3fffd8,22,154)
228
+ HTree.insert(0x7fffe5,23,155)
229
+ HTree.insert(0x3fffd9,22,156)
230
+ HTree.insert(0x7fffe6,23,157)
231
+ HTree.insert(0x7fffe7,23,158)
232
+ HTree.insert(0xffffef,24,159)
233
+ HTree.insert(0x3fffda,22,160)
234
+ HTree.insert(0x1fffdd,21,161)
235
+ HTree.insert(0xfffe9,20,162)
236
+ HTree.insert(0x3fffdb,22,163)
237
+ HTree.insert(0x3fffdc,22,164)
238
+ HTree.insert(0x7fffe8,23,165)
239
+ HTree.insert(0x7fffe9,23,166)
240
+ HTree.insert(0x1fffde,21,167)
241
+ HTree.insert(0x7fffea,23,168)
242
+ HTree.insert(0x3fffdd,22,169)
243
+ HTree.insert(0x3fffde,22,170)
244
+ HTree.insert(0xfffff0,24,171)
245
+ HTree.insert(0x1fffdf,21,172)
246
+ HTree.insert(0x3fffdf,22,173)
247
+ HTree.insert(0x7fffeb,23,174)
248
+ HTree.insert(0x7fffec,23,175)
249
+ HTree.insert(0x1fffe0,21,176)
250
+ HTree.insert(0x1fffe1,21,177)
251
+ HTree.insert(0x3fffe0,22,178)
252
+ HTree.insert(0x1fffe2,21,179)
253
+ HTree.insert(0x7fffed,23,180)
254
+ HTree.insert(0x3fffe1,22,181)
255
+ HTree.insert(0x7fffee,23,182)
256
+ HTree.insert(0x7fffef,23,183)
257
+ HTree.insert(0xfffea,20,184)
258
+ HTree.insert(0x3fffe2,22,185)
259
+ HTree.insert(0x3fffe3,22,186)
260
+ HTree.insert(0x3fffe4,22,187)
261
+ HTree.insert(0x7ffff0,23,188)
262
+ HTree.insert(0x3fffe5,22,189)
263
+ HTree.insert(0x3fffe6,22,190)
264
+ HTree.insert(0x7ffff1,23,191)
265
+ HTree.insert(0x3ffffe0,26,192)
266
+ HTree.insert(0x3ffffe1,26,193)
267
+ HTree.insert(0xfffeb,20,194)
268
+ HTree.insert(0x7fff1,19,195)
269
+ HTree.insert(0x3fffe7,22,196)
270
+ HTree.insert(0x7ffff2,23,197)
271
+ HTree.insert(0x3fffe8,22,198)
272
+ HTree.insert(0x1ffffec,25,199)
273
+ HTree.insert(0x3ffffe2,26,200)
274
+ HTree.insert(0x3ffffe3,26,201)
275
+ HTree.insert(0x3ffffe4,26,202)
276
+ HTree.insert(0x7ffffde,27,203)
277
+ HTree.insert(0x7ffffdf,27,204)
278
+ HTree.insert(0x3ffffe5,26,205)
279
+ HTree.insert(0xfffff1,24,206)
280
+ HTree.insert(0x1ffffed,25,207)
281
+ HTree.insert(0x7fff2,19,208)
282
+ HTree.insert(0x1fffe3,21,209)
283
+ HTree.insert(0x3ffffe6,26,210)
284
+ HTree.insert(0x7ffffe0,27,211)
285
+ HTree.insert(0x7ffffe1,27,212)
286
+ HTree.insert(0x3ffffe7,26,213)
287
+ HTree.insert(0x7ffffe2,27,214)
288
+ HTree.insert(0xfffff2,24,215)
289
+ HTree.insert(0x1fffe4,21,216)
290
+ HTree.insert(0x1fffe5,21,217)
291
+ HTree.insert(0x3ffffe8,26,218)
292
+ HTree.insert(0x3ffffe9,26,219)
293
+ HTree.insert(0xffffffd,28,220)
294
+ HTree.insert(0x7ffffe3,27,221)
295
+ HTree.insert(0x7ffffe4,27,222)
296
+ HTree.insert(0x7ffffe5,27,223)
297
+ HTree.insert(0xfffec,20,224)
298
+ HTree.insert(0xfffff3,24,225)
299
+ HTree.insert(0xfffed,20,226)
300
+ HTree.insert(0x1fffe6,21,227)
301
+ HTree.insert(0x3fffe9,22,228)
302
+ HTree.insert(0x1fffe7,21,229)
303
+ HTree.insert(0x1fffe8,21,230)
304
+ HTree.insert(0x7ffff3,23,231)
305
+ HTree.insert(0x3fffea,22,232)
306
+ HTree.insert(0x3fffeb,22,233)
307
+ HTree.insert(0x1ffffee,25,234)
308
+ HTree.insert(0x1ffffef,25,235)
309
+ HTree.insert(0xfffff4,24,236)
310
+ HTree.insert(0xfffff5,24,237)
311
+ HTree.insert(0x3ffffea,26,238)
312
+ HTree.insert(0x7ffff4,23,239)
313
+ HTree.insert(0x3ffffeb,26,240)
314
+ HTree.insert(0x7ffffe6,27,241)
315
+ HTree.insert(0x3ffffec,26,242)
316
+ HTree.insert(0x3ffffed,26,243)
317
+ HTree.insert(0x7ffffe7,27,244)
318
+ HTree.insert(0x7ffffe8,27,245)
319
+ HTree.insert(0x7ffffe9,27,246)
320
+ HTree.insert(0x7ffffea,27,247)
321
+ HTree.insert(0x7ffffeb,27,248)
322
+ HTree.insert(0xffffffe,28,249)
323
+ HTree.insert(0x7ffffec,27,250)
324
+ HTree.insert(0x7ffffed,27,251)
325
+ HTree.insert(0x7ffffee,27,252)
326
+ HTree.insert(0x7ffffef,27,253)
327
+ HTree.insert(0x7fffff0,27,254)
328
+ HTree.insert(0x3ffffee,26,255)
329
+ HTree.insert(0x3fffffff,30,256)
330
+ end
331
+ end
332
+ end
333
+ end
334
+ end
335
+ end
336
+ end
337
+ end
338
+
339
+