bayserver-docker-http 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
+