EXtremeZip 2022.1.27 → 2022.2.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 28ef36288016b807b01a2a9a8b4e5b8c53c28c89ed0686a53b2a5d03c4f3b5b6
4
- data.tar.gz: 45078a0ebfeae22cd0c3d1e1d211702a88f111491842bbc92de3410a925d38ce
3
+ metadata.gz: d6f7accde07ae32cb5a0b760673749535b3cbbcaf33df4688ca303b427080bff
4
+ data.tar.gz: 808669d1eb5fa58e9f6d89b5e8a01c0bafebf0f49475f215aee8cbb0f2b756e3
5
5
  SHA512:
6
- metadata.gz: b7d21377242380c6610b40d7ddca1d3bc7a3a3b1140e879317059a4e2993a8a8a0db38a3e6b632c1ac6e337fa55064cedde5b98f04445a8687bb50d8c50cf977
7
- data.tar.gz: de35bd17671ba87ae37c97ab053d1bbf578622f4fa380899218e8a71c74108f8d55961c2227180f5e3126c9075b5dc3b722504d2cfba24192a51672d1bfe9414
6
+ metadata.gz: 634db332f4d8656a233ab935ab82c83ef1dc934861534da11c47dfbf6e93e98a6432e7542a4951fdb3d9e5b294c1fb397185d471d07e2fb8e026f9922eacd8f2
7
+ data.tar.gz: 35eb1b03750c86e87f71fb997f529cd79ef407d42d3ced0d34ecd831fe503bb74acfd37101c4bacc02ee809e49e0285efa5844c2aabb22e19f2c010efe2d52df
@@ -1,20 +1,47 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- # require 'pathname'
4
- # require File.dirname(__FILE__)+'/filemessage.pb.rb'
5
3
  require 'victoriafresh'
6
4
  require 'cbor'
7
5
  require 'lzma'
8
6
  require 'get_process_mem'
9
7
 
10
8
  def checkMemoryUsage(lineNumber)
11
- mem = GetProcessMem.new
9
+ mem = GetProcessMem.new
12
10
 
13
- puts("#{lineNumber} , Memory: #{mem.mb}"); # Debug
11
+ puts("#{lineNumber} , Memory: #{mem.mb}"); # Debug
14
12
  end # def checkMemoryUsage
15
13
 
16
- # 根据版本号,提取VFS数据内容
17
- def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
14
+
15
+
16
+
17
+ class ExtremeUnZip
18
+ # 根据偏移值来读取压缩块数据列表。
19
+ def readVfsDataList(wholeCbor)
20
+ compressedVfsDataList = [] # 获取压缩后的数据块列表
21
+ startIndix=wholeCbor['vfsDataListStart'] # 初始起始位置。
22
+
23
+ puts "whole length: #{@wholeFileContent.length}, list conent: #{wholeCbor['vfsDataList']}" # Debug
24
+
25
+
26
+ wholeCbor['vfsDataList'].each do |currentBlockInfo| # 一个个块地处理
27
+ length=currentBlockInfo['length'] # 获取长度。
28
+
29
+ currentBlock=@wholeFileContent[startIndix, length] # 读取内容
30
+
31
+ puts "start index: #{startIndix}, length: #{length}, content length: #{currentBlock.length}" # Debug
32
+
33
+ compressedVfsDataList << currentBlock # 加入当前块
34
+
35
+ startIndix+=length # 位移。
36
+ end
37
+
38
+ compressedVfsDataList # 返回 内容
39
+ end
40
+
41
+ # 根据版本号,提取VFS数据内容
42
+
43
+
44
+ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
18
45
  victoriaFreshData = '' # 解压后的数据块整体
19
46
  dataFileName = 'victoriafreshdata.w' # 数据文件名
20
47
  dataFile = {} # 数据文件对象
@@ -31,6 +58,10 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
31
58
  dataFile.close # 关闭文件
32
59
  elsif (fileVersion >= 30) # 30以上版本
33
60
  compressedVfsDataList = wholeCbor['vfsDataList'] # 获取压缩后的数据块列表
61
+
62
+ if (fileVersion>=251) # 251 以上版本。要按照偏移值来读取压缩数据块列表。
63
+ compressedVfsDataList=readVfsDataList(wholeCbor) # 根据偏移值来读取压缩块数据列表。
64
+ end # if (fileVersion>=251) # 251 以上版本
34
65
 
35
66
  puts("data block amont: #{compressedVfsDataList.length}") # Debug
36
67
 
@@ -44,18 +75,12 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
44
75
 
45
76
  begin # 解压
46
77
  currentRawData = LZMA.decompress(currentCompressed) # 解压这一块
47
-
48
78
 
49
79
  dataFile.syswrite(currentRawData) # 写入内容
50
80
  rescue RuntimeError => e # 解压失败
51
81
  puts "Warning: the exz file may be incomplete." # 报告错误。文件可能不完整。
52
82
  end # begin # 解压
53
83
 
54
- # victoriaFreshData=victoriaFreshData+currentRawData #追加
55
- # victoriaFreshData << currentRawData #追加
56
-
57
- #puts("byte size: #{victoriaFreshData.bytesize}") # debug.
58
-
59
84
  dataBlockCounter += 1 # count
60
85
  end # compressedVfsDataList.each do |currentCompressed|
61
86
 
@@ -65,88 +90,46 @@ def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion)
65
90
  dataFileName # 返回解压后的数据块整体
66
91
  end # def extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
67
92
 
68
- def extractVfsDataWithVersion(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
69
- victoriaFreshData = '' # 解压后的数据块整体
70
-
71
- if (fileVersion == 14) # 14版本
72
- compressedVfsData = wholeCbor['vfsData'] # 获取压缩后的数据内容
73
-
74
- victoriaFreshData = LZMA.decompress(compressedVfsData) # 解压缩数据内容
75
- elsif (fileVersion >= 30) # 30以上版本
76
- compressedVfsDataList = wholeCbor['vfsDataList'] # 获取压缩后的数据块列表
77
-
78
- puts("data block amont: #{compressedVfsDataList.length}") # Debug
79
-
80
- dataBlockCounter = 0 # Data block counter
81
-
82
- compressedVfsDataList.each do |currentCompressed| # 一块块地解压
83
- puts("data block counter: #{dataBlockCounter}") # Debug
84
- checkMemoryUsage(34)
85
-
86
- currentRawData = LZMA.decompress(currentCompressed) # 解压这一块
87
-
88
- # victoriaFreshData=victoriaFreshData+currentRawData #追加
89
- victoriaFreshData << currentRawData # 追加
90
-
91
- puts("byte size: #{victoriaFreshData.bytesize}") # debug.
92
-
93
- dataBlockCounter += 1 # count
94
- end # compressedVfsDataList.each do |currentCompressed|
95
- end # if (fileVersion==14) #14版本
96
-
97
- victoriaFreshData # 返回解压后的数据块整体
98
- end # extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
99
-
100
- class ExtremeUnZip
101
- # 解压
93
+ # 解压
102
94
  def exuz(rootPath)
103
- result = true # 解压结果
104
-
105
- wholeFileContent = File.read(rootPath) # 最终文件内容
95
+ result = true # 解压结果
106
96
 
107
- checkMemoryUsage(60)
97
+ currentBlockFile = File.new(rootPath, 'rb') # 打开文件
108
98
 
109
- puts wholeFileContent.class # debug
99
+ @wholeFileContent = currentBlockFile.read # 读取全部内容
110
100
 
111
- wholeCborByteArray = wholeFileContent[4..-1] # 从第5个到末尾
101
+ currentBlockFile.close # 关闭文件
112
102
 
113
- # puts wholeCborByteArray #Debug.
103
+ checkMemoryUsage(60)
114
104
 
115
- #/usr/local/share/gems/gems/EXtremeZip-2021.7.8/lib/extremeunzip.zzaqsu.rb:110:in `decode': end of buffer reached (EOFError)
105
+ wholeCborByteArray = @wholeFileContent[4..-1] # 从第5个到末尾
116
106
 
117
107
  begin # 可能出错。
118
- options = {:tolerant => true}
108
+ options = {:tolerant => true}
119
109
 
120
- wholeCbor = CBOR.decode(wholeCborByteArray, options) # 解码
110
+ wholeCbor = CBOR.decode(wholeCborByteArray, options) # 解码
121
111
 
122
- fileVersion = wholeCbor['version'] # 获取版本号
112
+ fileVersion = wholeCbor['version'] # 获取版本号
123
113
 
124
114
  if (fileVersion < 14) # 版本号过小
125
- checkMemoryUsage(85)
126
- puts 'file version too old' # 报告错误
115
+ checkMemoryUsage(85)
116
+ puts 'file version too old' # 报告错误
127
117
  else # 版本号够大
128
- compressedVfsMenu = wholeCbor['vfsMenu'] # 获取压缩后的目录内容
118
+ compressedVfsMenu = wholeCbor['vfsMenu'] # 获取压缩后的目录内容
129
119
 
130
- checkMemoryUsage(90)
131
- replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
120
+ checkMemoryUsage(90)
121
+ replyByteArray = LZMA.decompress(compressedVfsMenu) # 解码目录VFS字节数组内容
132
122
 
133
- # puts replyByteArray #Debug
134
-
135
- checkMemoryUsage(95)
136
- # victoriaFreshData=extractVfsDataWithVersion(wholeCbor, fileVersion) #根据版本号,提取VFS数据内容
137
- victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
138
-
139
- # puts victoriaFreshData #Debug
140
-
141
- checkMemoryUsage(100)
142
- $clipDownloader = VictoriaFresh.new # 创建下载器。
143
-
144
- $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
123
+ checkMemoryUsage(95)
124
+
125
+ victoriaFreshDataFile = extractVfsDataWithVersionExternalFile(wholeCbor, fileVersion) # 根据版本号,提取VFS数据内容
145
126
 
146
- fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
127
+ checkMemoryUsage(100)
128
+ $clipDownloader = VictoriaFresh.new # 创建下载器。
147
129
 
148
- #File.delete(fileToRemove) # 删除文件
130
+ $clipDownloader.releaseFilesExternalDataFile(replyByteArray, victoriaFreshDataFile) # 释放各个文件
149
131
 
132
+ fileToRemove = File.new(victoriaFreshDataFile) # 要删除的文件
150
133
  end # if (fileVersion<14) #版本号过小
151
134
 
152
135
  result =true # 解压成功
@@ -8,6 +8,7 @@ require 'etc' # cpu amount
8
8
  require 'cod'
9
9
  require 'uuid'
10
10
  require 'get_process_mem'
11
+ require 'pathname'
11
12
 
12
13
  def checkMemoryUsage(lineNumber)
13
14
  mem = GetProcessMem.new
@@ -22,6 +23,7 @@ class ExtremeZip
22
23
  @filePartCounter = 0 # 文件分块计数器
23
24
  @responsePipeList = [] # 任务回复管道列表
24
25
  @processIdList = [] # 子进程编号列表。
26
+ @processTimestamp = Time.new.to_i # 记录进程启动的时间戳。
25
27
 
26
28
  @maxSubProcessAmount = Etc.nprocessors # 获取最大的子进程个数
27
29
 
@@ -48,34 +50,161 @@ class ExtremeZip
48
50
 
49
51
  # 加入基本文件信息
50
52
  def addBasicFileInformation
51
- @wholeCbor['version'] = 233 # 文件格式版本号
53
+ @wholeCbor['version'] = 251 # 文件格式版本号
52
54
 
53
55
  uuid = UUID.new # 获取生成器
54
56
  @wholeCbor['uuid'] = uuid.generate # 指定本个压缩包的唯一编号
57
+
58
+ @wholeCbor['website']='https://rubygems.org/gems/EXtremeZip' # 加入网站地址
59
+
60
+ @wholeCbor['vfsDataListStart']=198910 # 压缩 VFS 数据列表起始位置。
55
61
  end # addBasicFileInformation # 加入基本文件信息
62
+
63
+ def writeStamp(rootPath) # 更新时间戳文件
64
+ directoryPathName=Pathname.new(rootPath) #构造路径名字对象。
65
+ datastore= "#{directoryPathName.expand_path}/.exzstamp" # 配置文件路径
66
+ puts "writing stamp file: #{datastore}" # Debug
67
+
68
+ #stamp = wholeCbor['timestamp'] # 获取时间戳
69
+ stampCbor={} # 时间戳对象。
70
+ stampCbor['timestamp']= @processTimestamp # 设置时间戳。
71
+
72
+ compressed= stampCbor.to_cbor
73
+
74
+ extremeZipOutputFile = File.new(datastore, 'wb') # 创建文件
75
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
76
+ extremeZipOutputFile.close # 关闭文件
77
+
78
+ end # writeStamp # 更新时间戳文件
79
+
80
+ def loadStamp(rootPath) # 读取时间戳阈值。
81
+ stamp=0 # 默认值。
82
+ fileExists=false # 文件是否存在
83
+
84
+ directoryPathName=Pathname.new(rootPath) #构造路径名字对象。
85
+
86
+ isFile=directoryPathName.file? #是否是文件。
87
+
88
+ unless isFile #是文件就跳过。
89
+ #陈欣
90
+
91
+ datastore= "#{directoryPathName.expand_path}/.exzstamp" # 配置文件路径
92
+ puts "reading stamp file: #{datastore}" # Debug
93
+
94
+ begin # 尝试读取。
95
+
96
+ #陈欣
97
+
98
+ currentBlockFile = File.new(datastore, 'rb') # 打开文件
99
+
100
+ fileExists=true # 文件存在
101
+
102
+ stampFileContent = currentBlockFile.read # 读取全部内容
103
+
104
+ currentBlockFile.close # 关闭文件
105
+
106
+ options = {:tolerant => true}
107
+
108
+ wholeCbor = CBOR.decode(stampFileContent, options) # 解码
109
+
110
+ stamp = wholeCbor['timestamp'] # 获取时间戳
111
+ rescue Errno::ENOENT
112
+
113
+ end
114
+
115
+
116
+ end #unless isFile #是文件就跳过。
117
+
118
+ return stamp, fileExists # 返回时间戳。
119
+ end #loadStamp(rootPath) # 读取时间戳阈值。
56
120
 
57
121
  # 压缩
58
122
  def exz(rootPath)
59
- victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
123
+ timestampTHreshold, fileExists=loadStamp(rootPath) # 读取时间戳阈值。
124
+
125
+ #陈欣
126
+
127
+ if (timestampTHreshold > 0) # 有效的时间戳
128
+ @clipDownloader.timestampThreshold=timestampTHreshold # 设置文件时间戳阈值。
129
+ end #if (timestampTHreshold > 0) # 有效的时间戳
130
+
131
+ if fileExists # 存在文件,则表明将要发生增量压缩
132
+ @wholeCbor['incremental']=true # 是增量压缩。
133
+
134
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
60
135
 
61
- @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
136
+ @wholeCbor['timestamp']=@processTimestamp # 记录进程启动的时间戳。
137
+
138
+ victoriaFresh, = @clipDownloader.checkOnce(rootPath) # 打包该目录树。
62
139
 
63
- compressVfsMenu(victoriaFresh) # 压缩目录数据。
140
+ @filePartAmount = @clipDownloader.currentDiskFlushSuffix # 获取文件个数
64
141
 
65
- addBasicFileInformation # 加入基本文件信息
142
+ compressVfsMenu(victoriaFresh) # 压缩目录数据。
66
143
 
67
- processIdList, responsePipeList = launchSubProcesses # 启动子进程。
144
+ addBasicFileInformation # 加入基本文件信息
68
145
 
69
- receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
146
+ processIdList, responsePipeList = launchSubProcesses # 启动子进程。
70
147
 
71
- checkMemoryUsage(155)
72
- @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
148
+ receiveCompressedVfsDataList(processIdList, responsePipeList) # 接收压缩后的数据块列表
73
149
 
150
+ checkMemoryUsage(155)
151
+ @wholeCbor['vfsDataList'] = @vfsDataList # 加入数据
152
+
153
+ wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
154
+
155
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
156
+
157
+ while (vfsDataListStart!=@wholeCbor['vfsDataListStart']) # 计算出的偏移不一致
158
+ @wholeCbor['vfsDataListStart']=vfsDataListStart # 使用新的值
74
159
  wholeFileContent = 'exz' + "\0" + @wholeCbor.to_cbor # 追加CBOR字节数组
160
+ vfsDataListStart=wholeFileContent.length # 按照现在的序列化情况,计算出来的起始位置。
161
+ end
75
162
 
76
- # 写入文件:
77
- writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
163
+ # 写入文件:
164
+ writeFile(wholeFileContent, victoriaFresh) # 写入文件内容
165
+
166
+ appendVfsDataList victoriaFresh # 追加压缩块列表数据。
167
+
168
+ if fileExists # 存在文件,则表明将要发生增量压缩
169
+ writeStamp # 更新时间戳文件
170
+ end # if fileExists # 存在文件,则表明用户要求增量压缩
171
+
78
172
  end # def exz(rootPath)
173
+
174
+ # 写入压缩块文件
175
+ def writeCompressBlock(compressed, processCounter)
176
+ extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
177
+ extremeZipOutputFile.syswrite(compressed) # 写入文件
178
+ extremeZipOutputFile.close # 关闭文件
179
+ end
180
+
181
+ # 追加压缩块列表数据。
182
+ def appendVfsDataList (victoriaFresh)
183
+ extremeZipOutputFile = File.new("#{victoriaFresh['name']}.exz", 'ab') # 打开文件
184
+
185
+ processCounter=0 # 块计数器。
186
+
187
+ @wholeCbor['vfsDataList'].each do
188
+ #extremeZipOutputFile = File.new("comressed.#{processCounter}.cex", 'wb') # 创建文件
189
+
190
+ currentBlockFile = File.new("comressed.#{processCounter}.cex", 'rb') # 打开文件
191
+
192
+ wholeFileContent = currentBlockFile.read # 读取全部内容
193
+
194
+ currentBlockFile.close # 关闭文件
195
+ File.delete(currentBlockFile) # 删除数据块文件
196
+
197
+ #wholeFileContent=File.read("comressed.#{processCounter}.cex", 'rb') # 读取压缩块。
198
+
199
+ puts "wirte file contetn length: #{wholeFileContent.length}" # Debghu
200
+
201
+ extremeZipOutputFile.syswrite(wholeFileContent) # 写入文件
202
+
203
+ processCounter += 1 # 计数
204
+ end
205
+
206
+ extremeZipOutputFile.close # 关闭文件
207
+ end
79
208
 
80
209
  # 写入文件内容
81
210
  def writeFile(wholeFileContent, victoriaFresh)
@@ -92,8 +221,16 @@ class ExtremeZip
92
221
  currentSubProcess=processIdList[processCounter] # 获取子进程对象
93
222
  #processIdList.each do |currentSubProcess|
94
223
  compressed = receiveFromSubProcess(currentSubProcess, responsePipeList, processCounter) # 从子进程中读取数据,并终止子进程
224
+
225
+ #写入当前压缩块到文件系统中去作为缓存。陈欣
226
+ writeCompressBlock(compressed, processCounter) # 写入压缩块文件
227
+
228
+ blockInfo={} # 块信息
229
+ blockInfo['length']=compressed.length # 记录长度
230
+
231
+ puts "block length: #{blockInfo['length']}" # Debug
95
232
 
96
- @vfsDataList << compressed # 加入数据块列表中
233
+ @vfsDataList << blockInfo # 加入数据块列表中
97
234
  checkMemoryUsage(150)
98
235
 
99
236
  processCounter += 1 # 子进程计数
@@ -112,7 +249,7 @@ class ExtremeZip
112
249
 
113
250
  currentBlockFile.close # 关闭文件
114
251
 
115
- #File.delete(currentBlockFile) # 删除数据块文件
252
+ File.delete(currentBlockFile) # 删除数据块文件
116
253
 
117
254
  currentBlockData
118
255
  end
@@ -121,11 +258,8 @@ class ExtremeZip
121
258
  def schedule1Block(filePartCounter)
122
259
  currentBlockData = readBlockFile(filePartCounter) # 读取块文件内容
123
260
 
124
- # currentTaskPipe = Cod.pipe # 任务分配管道
125
261
  currentResponsePipe = Cod.pipe # 任务回复管道
126
262
 
127
- puts("forking sub process, file part counter: #{filePartCounter}") # Debug.
128
-
129
263
  p1 = fork do # 复制出子进程
130
264
  compressInSubProcess(currentBlockData, currentResponsePipe) # 在子进程中具体执行的压缩代码
131
265
  end # p1 = fork do #复制出子进程
@@ -146,11 +280,8 @@ class ExtremeZip
146
280
 
147
281
  # 启动子进程。
148
282
  def launchSubProcesses
149
-
150
- #while ((@filePartCounter < @filePartAmount) && (true)) # 未处理完毕,并且未达到最大子进程个数
151
283
  while ((@filePartCounter < @filePartAmount) && (@filePartCounter<@maxSubProcessAmount)) # 未处理完毕,并且未达到最大子进程个数
152
284
  currentResponsePipe, p1 = schedule1Block(@filePartCounter) # 计划一个块的压缩计算
153
-
154
285
  end # while processDataLength < victoriaFreshData.byte_size do #未处理完毕
155
286
 
156
287
  [@processIdList, @responsePipeList]
@@ -168,7 +299,6 @@ class ExtremeZip
168
299
 
169
300
  currentResponsePipe.put currentCompressedVfsData # 将压缩后的数据块写入到回复管道中
170
301
 
171
- checkMemoryUsage(125)
172
302
  puts("finished #{Process.pid}") # Debug
173
303
  end # compressInSubProcess(currentBlockData, currentResponsePipe) # 在子进程中具体执行的压缩代码
174
304
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: EXtremeZip
3
3
  version: !ruby/object:Gem::Version
4
- version: 2022.1.27
4
+ version: 2022.2.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hxcan Cai
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-27 00:00:00.000000000 Z
11
+ date: 2022-02-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cod
@@ -86,20 +86,20 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 2022.1.27
89
+ version: 2022.2.19
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 2022.1.27
92
+ version: 2022.2.19
93
93
  type: :runtime
94
94
  prerelease: false
95
95
  version_requirements: !ruby/object:Gem::Requirement
96
96
  requirements:
97
97
  - - "~>"
98
98
  - !ruby/object:Gem::Version
99
- version: 2022.1.27
99
+ version: 2022.2.19
100
100
  - - ">="
101
101
  - !ruby/object:Gem::Version
102
- version: 2022.1.27
102
+ version: 2022.2.19
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: hx_cbor
105
105
  requirement: !ruby/object:Gem::Requirement